把单个的Excel表格汇入一个总表中去,也许你在想这还不简单吗?Excel不就是有合并表的功能么,两下就搞定了,但是一下要汇入上千个的表格呢,这个时候慌了吗?
看到这些表单,是不是有点慌
1059个对象
答案当然是不要慌,用Python,省时省力,自动化处理不香吗?
接着往下看,学会这招,做办公室最靓的仔!
思路
1. 创建一个空表名叫"总表",表格形式须和合并表的一样
2. 获取需要合并文件夹中的所有excel表的名字(文件名)
3. 开始遍历excel表
4. 先读取数据,然后写入事先创建好总表中
5. 当读取完下一个待合并表的数据,然后准备写入到总表时,必须先获取到总表的行数,不然之前的数据将会被覆盖掉。
6. 遍历结束,保存总表的数据
所需技能包
会用python对excel表的读操作
会用python对excel表的写操作
完整代码:
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):