Windows可执行程序
很奇怪的场景,但既然有,肯定不是个例,整一个exe放在这里,可以直接使用。由于我把Python和用到的模块全部打包进去了,所以有点大,其实也就几行代码而已,竟然有10M
使用场景
你有一些工作簿,比如财务报表,我这里就用“测试用表”来表示。

Yaodo·2022-04-14·399 次阅读
很奇怪的场景,但既然有,肯定不是个例,整一个exe放在这里,可以直接使用。由于我把Python和用到的模块全部打包进去了,所以有点大,其实也就几行代码而已,竟然有10M
你有一些工作簿,比如财务报表,我这里就用“测试用表”来表示。

你想把所有的工作簿里面的第一张表,横向排列到一张表中,就像这样:

先把那些文件放在同一个文件夹里,就像第一张图上那样。双击下载的exe文件运行。
会跳出一个对话框,选择你刚刚新建的文件夹,点击“选择文件夹”。

设定你要合并的单元格范围,比如我这里想要合并的是A2:E6

然后按任意键运行就行了,最后会在文件夹下生成一个result.xlsx
from openpyxl import load_workbook
from openpyxl import Workbook
from copy import copy
import os
import warnings
warnings.filterwarnings('ignore')
# 设定目录
path = r"C:\Users\rvw\Desktop\新建文件夹"
# 设定要合并的单元格范围
start = "A3".upper() # 起始单元格(左上角)
end = "e6".upper() # 结束单元格(右下角)
# 定义复制方法
def copy_cell(cell, new_cell):
new_cell.value = cell.value
if cell.has_style:
new_cell.font = copy(cell.font)
new_cell.border = copy(cell.border)
new_cell.fill = copy(cell.fill)
new_cell.number_format = copy(cell.number_format)
new_cell.protection = copy(cell.protection)
new_cell.alignment = copy(cell.alignment)
return 0
# 新建空白工作簿用以保存
new_wb = Workbook()
ws = new_wb.worksheets[0]
# 读取文件夹中的所有Excel文件
files = []
for r,ds,fs in os.walk(path):
for f in fs:
if '.xls' not in f: continue
files.append(os.path.join(r,f))
files.sort()
print('即将按顺序合并以下文件(合并范围{}:{}):'.format(start,end))
# 复制到空白工作簿
for i in range(len(files)):
f = files[i]
print(f)
wb = load_workbook(filename = f)
sh = wb.worksheets[0]
area = sh[start:end]
for row in area:
for cell in row:
r = cell.row
c = cell.column + len(area[0])*i
copy_cell(cell, ws.cell(r,c))
# 保存空白工作簿
dest = os.path.join(path,'result.xlsx')
new_wb.save(filename = dest)
x = input('合并完成。\n已保存到{},按任意键退出。'.format(dest))
需要的模块有:
要替换的有:

其实核心代码只有一段:
def copy_cell(cell, new_cell):
new_cell.value = cell.value
if cell.has_style:
new_cell.font = copy(cell.font)
new_cell.border = copy(cell.border)
new_cell.fill = copy(cell.fill)
new_cell.number_format = copy(cell.number_format)
new_cell.protection = copy(cell.protection)
new_cell.alignment = copy(cell.alignment)
return 0
参考:
Comments | NOTHING