小恶芯 发表于 2022-2-18 20:35

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:12

本帖最后由 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<程序结束>')

```
写得很菜,权当一笑

没有注释,还请见谅

小恶芯 发表于 2022-2-18 22:52

sunxuewei888 发表于 2022-2-18 22:15
双击此文件打不开显示如何打开文件WIN10

这个是python代码,需要提前安装python3的运行环境,之后再在命令行输入pip install openpyxl安装之后,将需要合并的xlsx文件和mergeExcel.py放在同一路径,双击即可运行

qiubai2022 发表于 2022-2-18 20:44

感谢分享,很实用。

lospring 发表于 2022-2-18 20:45

xls和xlsx可以合并吗?有没有相关的函数呢?或者可以用啥转换一下?谢谢

cyantea 发表于 2022-2-18 21:22

感谢分享

小恶芯 发表于 2022-2-18 21:22

lospring 发表于 2022-2-18 20:45
xls和xlsx可以合并吗?有没有相关的函数呢?或者可以用啥转换一下?谢谢

我用的这个openpyxl包不支持.xls文件的哦,可以将.xls文件另存为.xlsx文件,再用这个脚本进行合并就好了哦

sunxuewei888 发表于 2022-2-18 22:15

双击此文件打不开显示如何打开文件WIN10

Cacarot 发表于 2022-2-18 22:19

很实用,支持多sheet不?

小恶芯 发表于 2022-2-18 22:51

Cacarot 发表于 2022-2-18 22:19
很实用,支持多sheet不?

目前是不支持多sheet的嗷
页: [1] 2 3 4
查看完整版本: Excel文件(.xlsx)合并 - 更新支持多Sheet合并 - python源码