H5W3
当前位置:H5W3 > python > 正文

【Python】python一键合并上千个Excel表(对不起!!因为这事,我和同事吵了一架)

文章目录

  • 一、老板的需求总是莫名奇妙
    • 二、别人不帮你,你帮你自己
      • 三、上干货,看不懂,我买飞机票给你
        • 四、上代码:(每一步都有注释,完全不用担心,全网最良心)
        • 五、不是程序员,也别慌
            • 六、分享交流

一、老板的需求总是莫名奇妙

  • 老板需求:
       _一天老板说,嘿!放牛娃,将这些excel表合并到一个总表里,下班前交给我_
       老板话刚讲完,我心里就想,这还不简单么,excel不就是有合并表的功能么!!简单的要死!哈哈哈哈哈哈
       可当我拿到excel表后,自己傻眼了,上千个,一两三个在excel里还行,这么多咋搞?????不信看下图
    【Python】python一键合并上千个Excel表(对不起!!因为这事,我和同事吵了一架)【Python】python一键合并上千个Excel表(对不起!!因为这事,我和同事吵了一架)
  • 搬救兵:
       顿时我就慌了,这么多我真没有在Excel里合并过,我就找了同事,同事说这还不简单,就在Excel里面写脚本呀!!,我暗暗的说,我不会,然后他甩了一句话给我,_你不会你活该,谁叫你不学呀,你不会百度呀!!反正领导不是让我做,气死你_
       虽然我知道我的同事性格就是这样,但是我在那刻我还是很想打他,真想打他一顿,但是最后我只说了一句,我就不用Excel,我也能够搞定,你有什么可豪横的

二、别人不帮你,你帮你自己

  • 有事找度娘:
       首先,我在网上,csdn找了相关的文章,大多都是鱼龙混杂,可能作者自己会,但是分享给人,别人却看不懂,完全按照作者的来操作,却得不出结果,失败告终
  • 程序员就拿出自己的本领
       寻找无果后,我决定自己写一个python程序,将思路捋了一波后,就开始着手写了

三、上干货,看不懂,我买飞机票给你

  • 思路分析一波:
`"""
思路分析:
1. 创建一个空表名叫"总表",表格形式须和合并表的一样
2. 获取需要合并文件夹中的所有excel表的名字(文件名)
3. 开始遍历excel表
4. 先读取数据,然后写入事先创建好总表中
5. 当读取完下一个待合并表的数据,然后准备写入到总表时,必须先获取到总表的行数,不然之前的数据将会被覆盖掉。
6. 遍历结束,保存总表的数据
"""`
*   1
*   2
*   3
*   4
*   5
*   6
*   7
*   8
*   9
  • 所需技能包

如果上述说的不会,咋办??没事!!我帮你找出来了

  • 相关技能包文章:
    1)python操作Excel表让你体验光速便捷—读操作
  1. python操作Excel表让你体验光速便捷—写操作
  2. python操作Excel表让你体验光速便捷—写操作之xlutils库(推荐使用)
  3. 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夹中
"""
# 1.总表初始化(不友好,还需要自行写好表头列表,对非程序员不友好)
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
# 1.1 总表初始化(用来解决上面的问题)
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的所有文件
excel_name_list = get_All_Excelname(sourceExcel_path)
# 一个待合并execl的路径
excel_path = sourceExcel_path + "/" + excel_name_list[0]
# 获取excel的sheet
excel_sheet = get_excel_sheet(excel_path)
# 获取excel的表头数据
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
# 2.获取需要合并的所有的excel文件名
def get_All_Excelname(path):
"""
:param path: 待合并excel文件的路径
:return:
"""
excelName_list = os.listdir(path)
# print(excelName_list)
return excelName_list
# 返回excel表的sheet对象
def get_excel_sheet(path):
# 打开指定路径的excle表
book = xlrd.open_workbook(path)
# 获取excle中的表单
sheet = book.sheet_by_index(0)
# 返回sheet对象
return sheet
# 返回总表的wtbook,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
# 4. 开始遍历(合并excel表)
def writeExcel(destExcel_path,source_path,excelName_list):
"""
:param destExcel_path: 合并总表存放的路径
:param source_path: 需要合并excel的路径
:param excelName_list: 需要合并excel表的文件名称
:return:
"""
# 用来记录总表中的行数
total_excel_row = 1
# 获取总表的book,sheet
total_book,total_sheet = get_total_excel_sheet(destExcel_path)
for excelName in excelName_list:
# 文件路径
excelPath = source_path + excelName
# 获取表的sheet对象
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]))
# 每写一行,总表行数加1
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():
# 待需合并的excel文件夹路径
source_excel_path = "./excels/"
# 存放合并后的excel表文件夹路径
dest_dir = "./destDir"
# 创建文件夹
makeDir(dest_dir)
# 合并excel表名
total_excel_name = "总表.xls"
# 合并表存放路径
total_excel_path = dest_dir + "/" + total_excel_name
# 合并总表中的sheet的名字
total_excel_sheet_name = "汇总表"
# 初始化表
flag = initExcel2(total_excel_path,source_excel_path,total_excel_sheet_name)
if flag:
excelName_list = get_All_Excelname("./excels")
# 打印有多少个excel表
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

看到这,都不留个赞说不过去了吧吧!!!!

运行结果:
【Python】python一键合并上千个Excel表(对不起!!因为这事,我和同事吵了一架)
【Python】python一键合并上千个Excel表(对不起!!因为这事,我和同事吵了一架)

五、不是程序员,也别慌

   为了顾及非程序也能够运行这个程序,我将它打包成一个自动合并工具,即.exe程序,看图!!

【Python】python一键合并上千个Excel表(对不起!!因为这事,我和同事吵了一架)
只要按照说明书那样操作,那就完事了(非常简单,双击运行即可),看到这,再不点个赞,我可要打人了哈!!!!!!!!

这么好用的工具如何获取呢?
   关注我的公众号,阅读这篇文章–>python一键合并上千个Excel表(对不起!!因为这事,我和同事吵了一架),文章末尾,赞赏1块钱截图并发我微信,我本人亲自发你哟!!

   吐槽一波:我知道有些大佬肯定会喷,会唾弃我,如果你介意那1块钱,那就复制上面那代码,直接运行就好,没有必要喷哟!毕竟原创不易呀,吃土年代,需要生存。!!!!

   有问题可以留言交流呀!!!!,也可以分享你的解决方案!!!

六、分享交流

最后有兴趣一起交流的,可以关注我的公众号:这里你能够学到很实用的技巧,不是常用的我不说,公众号回复提取码即可获取以下学习资料啦啦啦啦,喜欢就拿去吧!!

(链接时常会失效,若出现此类情况,可以加我微信:17722328325(加时请备注:学习资料))

  1. Java web从入门到精通电子书
  2. Python机器学习电子书
  3. Python400集(北京尚学堂)
  4. JavaScript项目案例、经典面试题
  5. Java300集(入门、精通)
  6. Java后端培训机构录集(同事培训内部提供)
  7. java重要知识pdf文档(价值连城呀呀,不收藏你会后悔的)
    • *

【Python】python一键合并上千个Excel表(对不起!!因为这事,我和同事吵了一架)

本文地址:H5W3 » 【Python】python一键合并上千个Excel表(对不起!!因为这事,我和同事吵了一架)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址