python小白学了一点入门之后,觉得可以尝试着写这么一个小应用:工作中有时候会下发收集表格,后续需要汇总成一个,下面要解决的就是怎么样将多个excel文件的内容合并成一个的问题。
一 安装相关模块
这里用到的是openpyxl模块。安装方式是通过pycharm安装。也可以通过其他方式安装,这里不赘述。
二 写程序
- 新建两个测试excel文件:combat1.xlsx combat.xlsx。里面可以随意填写一些内容。
- 新建用于存放合并结果的excel文件:f_combat.xlsx
- 在1 2步相同文件夹下新建python文件:combat.py
编写思路:
- 打开各个excel文件,打开sheet页
- 打开存放结果的excel文件,清空内容
- 逐行读取各个excel文件的内容,写入结果文件。
结果如下:
from openpyxl import Workbook,load_workbook
wb1=load_workbook("combat1.xlsx") #打开各个excel文件,打开sheet页
wb2=load_workbook("combat2.xlsx")
sheet1=wb1["Sheet1"]
sheet2=wb2["Sheet1"]
wb=load_workbook("f_combat.xlsx")
del wb["Sheet1"] #打开存放结果的excel文件,清空内容
sheet=wb.create_sheet("Sheet1")
wb.save("f_combat.xlsx")
for row in sheet1: #读第一个Excel文件,把内容存放到一个列表里面
null1 = []
for cell in row:
a=cell.value
null1.append(a)
sheet.append(null1) #sheet.append只能传入list等,所以转了一步list写入
for row in sheet2:
null2 = []
for cell in row:
a=cell.value
null2.append(a)
sheet.append(null2)
wb.save("f_combat.xlsx")
wb.close()
三 优化程序
以上代码里面显然有不少重复的部分,优化思路是改成函数,支持多个excel。
参数格式是字典:{"excel名":"sheet名"}
结果如下:
def combat(filename):
from openpyxl import Workbook,load_workbook
#定义要写入的结果xlsx文件
wb=load_workbook("f_combat.xlsx")
del wb["Sheet1"] #打开存放结果的excel文件,清空内容
sheet=wb.create_sheet("Sheet1")
wb.save("f_combat.xlsx")
for k in filename:
wbx=load_workbook(k)
sheetx=wbx[filename[k]]
for row in sheetx:
null1 = []
for cell in row:
a = cell.value
null1.append(a)
sheet.append(null1) #sheet.append只能传入list等,所以转了一步list写入
wb.save("f_combat.xlsx")
wb.close()
# 合并 两个测试文件的写法:
combat({"combat1.xlsx":"Sheet1","combat2.xlsx":"Sheet1"})
四 测试结果
测试成功。不过实际应用会有标题行重复的问题,在结果文件里面筛选一下删除就好,