如果你觉得对你有用,留下一个赞再走,不过分吧!!谢谢!!
一、老板的需求总是莫名奇妙
-
老板需求:
一天老板说,嘿!放牛娃,将这些excel表合并到一个总表里,下班前交给我
老板话刚讲完,我心里就想,这还不简单么,excel不就是有合并表的功能么!!
简单的要死
!哈哈哈哈哈哈
可当我拿到excel表后,自己傻眼了,上千个,一两三个在excel里还行,这么多咋搞?????不信看下图
-
搬救兵:
顿时我就慌了,这么多我真没有在Excel里合并过,我就找了同事,
同事说这还不简单,就在Excel里面写脚本呀!!
,我暗暗的说,我不会,然后他甩了一句话给我,
你不会你活该,谁叫你不学呀,你不会百度呀!!反正领导不是让我做,气死你
虽然我知道我的同事性格就是这样,但是我在那刻我还是很想打他,真想打他一顿,但是最后
我只说了一句,我就不用Excel,我也能够搞定,你有什么可豪横的
二、别人不帮你,你帮你自己
-
有事找度娘:
首先,我在
网上
,
csdn
找了相关的文章,大多都是
鱼龙混杂
,可能作者自己会,但是分享给人,别人却看不懂,完全按照作者的来操作,却得不出结果,
失败告终
-
程序员就拿出自己的本领
寻找无果后,我决定自己写一个python程序,将思路捋了一波后,就开始着手写了
三、上干货,看不懂,我买飞机票给你
"""
思路分析:
1. 创建一个空表名叫"总表",表格形式须和合并表的一样
2. 获取需要合并文件夹中的所有excel表的名字(文件名)
3. 开始遍历excel表
4. 先读取数据,然后写入事先创建好总表中
5. 当读取完下一个待合并表的数据,然后准备写入到总表时,必须先获取到总表的行数,不然之前的数据将会被覆盖掉。
6. 遍历结束,保存总表的数据
"""
-
会用python对excel表的读操作
-
会用python对excel表的写操作
如果上述说的不会,咋办??没事!!
我帮你找出来了
-
python操作Excel表让你体验光速便捷—写操作
-
python操作Excel表让你体验光速便捷—写操作之xlutils库(推荐使用)
-
python操作Excel表让你体验光速便捷—读写操作之pandas库(神来之笔,带你飞,全套)
四、上代码:(每一步都有注释,完全不用担心,全网最良心)
完整代码:
import os
import xlwt
import xlrd
import xlutils.copy
import time
"""
公司老板需求:
1. 将上千个Excel表合并成一个表里
2. 不管你用什么方法,实现效果就行
"""
"""
思路分析:
1. 创建一个空表名叫"总表",表格形式须和合并表的一样
2. 获取需要合并文件夹中的所有excel表的名字(文件名)
3. 开始遍历excel表
4. 先读取数据,然后写入事先创建好总表中
5. 当读取完下一个待合并表的数据,然后准备写入到总表时,必须先获取到总表的行数,不然之前的数据将会被覆盖掉。
6. 遍历结束,保存总表的数据
"""
"""
项目运行:
1. 将所有需要合并的表放到一个文件夹中,名叫excels
2. autoMerge.py文件和excels文件夹同级
3. 运行该.py文件,会在把合并表放到destDir夹中
"""
def initExcel(path,excelTitle,excel_sheet_Name):
"""
:param path: 合并总表的路径
:param excelTitle: 总表的表头
:param excel_sheet_Name: 合并总表的sheet名称
:return: 返回总表是否初始化成功
"""
try:
book = xlwt.Workbook(encoding="utf-8")
sheet = book.add_sheet(excel_sheet_Name)
for i in range(0,len(excelTitle)):
sheet.write(0, i, excelTitle[i])
book.save(path)
return True
except Exception as e:
return False
def initExcel2(destExcel_path, sourceExcel_path,total_sheet_name):
"""
:param destExcel_path: 合并总表excel的路径
:param sourceExcel_path: 需要合并excel的路径
:param total_sheet_name: 合并总表后sheet的名字
:return: 返回False or True
"""
try:
book =
xlwt.Workbook(encoding="utf-8")
sheet = book.add_sheet(total_sheet_name)
excel_name_list = get_All_Excelname(sourceExcel_path)
excel_path = sourceExcel_path + "/" + excel_name_list[0]
excel_sheet = get_excel_sheet(excel_path)
excel_title_list = excel_sheet.row_values(0)
for i in range(0,len(excel_title_list)):
sheet.write(0, i, excel_title_list[i])
book.save(destExcel_path)
return True
except Exception as e:
return False
def get_All_Excelname(path):
"""
:param path: 待合并excel文件的路径
:return:
"""
excelName_list = os.listdir(path)
return excelName_list
def get_excel_sheet(path):
book = xlrd.open_workbook(path)
sheet = book.sheet_by_index(0)
return sheet
def get_total_excel_sheet(path):
"""
:param path: 存放总表的path
:return:
"""
book = xlrd.open_workbook(path, formatting_info=True)
wtbook = xlutils.copy.copy(book)
wtsheet = wtbook.get_sheet(0)
return wtbook,wtsheet
def writeExcel(destExcel_path,source_path,excelName_list):
"""
:param destExcel_path: 合并总表存放的路径
:param source_path: 需要合并excel的路径
:param excelName_list: 需要合并excel表的文件名称
:return:
"""
total_excel_row = 1
total_book,total_sheet = get_total_excel_sheet(destExcel_path)
for excelName in excelName_list:
excelPath = source_path + excelName
sheet = get_excel_sheet(excelPath)
n_rows = sheet.nrows
for row_index in range(1,n_rows):
row_data_list = sheet.row_values(row_index)
for j in range(0,len(row_data_list)):
total_sheet.write(total_excel_row,j,str(row_data_list[j]))
total_excel_row = total_excel_row + 1
total_book.save(destExcel_path)
print("数据合并已完成")
print("合并后的数据共有%d条" % (total_excel_row - 1
))
def makeDir(path):
"""
:param path: 传入需要创建文件夹的路径
:return:
"""
if not os.path.exists(path):
os.mkdir(path)
def main():
source_excel_path = "./excels/"
dest_dir = "./destDir"
makeDir(dest_dir)
total_excel_name = "总表.xls"
total_excel_path = dest_dir + "/" + total_excel_name
total_excel_sheet_name = "汇总表"
flag = initExcel2(total_excel_path,source_excel_path,total_excel_sheet_name)
if flag:
excelName_list = get_All_Excelname("./excels")
print("总共有%d个excel表需要合并" %len(excelName_list))
writeExcel(total_excel_path,source_excel_path, excelName_list)
else:
print("初始化表失败")
if __name__ == '__main__':
main()
time.sleep(3)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
看到这,都不留个赞说不过去了吧吧!!!!
运行结果:
五、不是程序员,也别慌
为了顾及非程序也能够运行这个程序,我将它打包成一个自动合并工具,即.exe程序,看图!!
只要按照说明书那样操作,那就完事了(非常简单,双击运行即可)
,看到这,再不点个赞,我可要打人了哈!!!!!!!!
如果需要这个工具,可以关注我的公众号,后台回复“
自动合并工具
”提取。
敲重点:
有问题可以留言交流呀!!!!,也可以分享你的解决方案!!!
六、分享交流
最后有兴趣一起交流的,可以关注我的公众号:这里你能够学到很实用的技巧,
不是常用的我不说
,公众号回复
提取码
即可获取以下学习资料啦啦啦啦,喜欢就拿去吧!!
(链接时常会失效,若出现此类情况,可以加我微信:17722328325(加时请备注:学习资料))
-
Java web从入门到精通电子书
-
Python机器学习电子书
-
Python400集(北京尚学堂)
-
JavaScript项目案例、经典面试题
-
Java300集(入门、精通)
-
Java后端培训机构录集(同事培训内部提供)
-
java重要知识pdf文档(价值连城呀呀,不收藏你会后悔的)
喜欢就关注吧,点个赞吧