Excel文件(.xlsx)合并 - 更新支持多Sheet合并 - python源码
本帖最后由 小恶芯 于 2022-2-19 14:43 编辑使用方式:将mergeExcel.py和想要进行合并的.xlsx文件放入同一文件夹中,双击运行mergeExcel.py即可
按照文件名的升序排序进行合并,合并后的文件名:Output.xlsx
20220219更新支持多xlsx多Sheet合并,按照对应Sheet名称进行合并
```
#支持多sheet合并,将不同xlsx文件中的同名sheet的内容进行合并
import os
from openpyxl import Workbook
from openpyxl import load_workbook
def getAllFiles():
#返回当前目录下的Excel表格文件的名称(*.xlsx)
path = os.getcwd()
return
def isXlsx(file):
#判断是否是.xlsx文件
if os.path.splitext(file)[-1] == '.xlsx':
return True
else:
return False
def sortXlsx(files):
#按文件名对.xlsx文件进行升序排序
files.sort(reverse=False)
def getAllXlsx():
files = getAllFiles()
xlsxList = []
for file in files:
if isXlsx(file):
xlsxList.append(file)
else:
pass
return xlsxList
targetXlsx = 'Output.xlsx'
xlsxList = getAllXlsx()
sortXlsx(xlsxList)
wb = Workbook()
for xlsx in xlsxList:
wbtemp = load_workbook(xlsx)
for currentSheet in wbtemp.sheetnames:
wstemp = wbtemp
max_row = wstemp.max_row
max_column = wstemp.max_column
if currentSheet not in wb.sheetnames:
#判断当前表的表名是否在targetXlsx中存在
ws = wb.create_sheet(currentSheet, -1) #在targetXlsx所有表的后面创建一个新表
else:
ws = wb
if ws.max_row == 1 and ws.max_column == 1 and ws.cell(1, 1).value is None:
#计算覆盖位置,空表则将row置0
row = 0
else:
row = ws.max_row
for i in range(1, max_row + 1):
for j in range(1, max_column + 1):
data = wstemp.cell(i, j).value
ws.cell(row + i, j, data)
wb.save(targetXlsx)
```
示例图片:
合并前的工作簿1:
合并前的工作簿2的两张表:
合并后的工作簿中的两张表:
百度云链接:
链接:https://pan.baidu.com/s/1sZXj7Hb8VEXDkW2aHu7ApQ
提取码:52pj
--来自百度网盘超级会员V7的分享土豪下载链接: 本帖最后由 Romeo_Ahmed 于 2022-2-18 22:13 编辑
好家伙,我这还写了个合并csv文件的,也放上来吧
```python
# coding = utf-8
"""
表格拼接程序 v1.9
by Romeo_Ahmed
"""
import os
import csv
print('欢迎使用表格拼接程序\n程序版本:1.9\n在使用前,您应将要拼接的表格转换为csv格式\n')
input('<按回车键开始>')
while True:
folder_path = input('\n请输入您要拼接的表格所在文件夹的路径(例:C:\\工作\\):\n')
result_path = input('\n请输入您想要生成的文件及路径(只支持csv格式,例:C:\\test.csv):\n')
print('\n生成的csv文件内容为:')
rows = []
file_list = os.listdir(folder_path)
for file in file_list:
file_path = folder_path + file
with open(file_path, 'r', encoding='utf-8') as f:
file_reader = csv.DictReader(f)
head = file_reader.fieldnames
for row in file_reader:
print(row)
rows.append(row)
with open(result_path, 'w', encoding='utf-8') as j:
file_writer = csv.DictWriter(j, fieldnames=head)
file_writer.writeheader()
file_writer.writerows(rows)
print('\n----------拼接成功----------')
choice = input('\n是否退出(是/否):')
if choice == '是':
break
else:
input('\n<按回车键重新开始>\n')
input('\n<程序结束>')
```
写得很菜,权当一笑
没有注释,还请见谅 sunxuewei888 发表于 2022-2-18 22:15
双击此文件打不开显示如何打开文件WIN10
这个是python代码,需要提前安装python3的运行环境,之后再在命令行输入pip install openpyxl安装之后,将需要合并的xlsx文件和mergeExcel.py放在同一路径,双击即可运行 感谢分享,很实用。 xls和xlsx可以合并吗?有没有相关的函数呢?或者可以用啥转换一下?谢谢 感谢分享
lospring 发表于 2022-2-18 20:45
xls和xlsx可以合并吗?有没有相关的函数呢?或者可以用啥转换一下?谢谢
我用的这个openpyxl包不支持.xls文件的哦,可以将.xls文件另存为.xlsx文件,再用这个脚本进行合并就好了哦 双击此文件打不开显示如何打开文件WIN10 很实用,支持多sheet不? Cacarot 发表于 2022-2-18 22:19
很实用,支持多sheet不?
目前是不支持多sheet的嗷