1.需求背景
-
最近疫情防控,收取上来各个街道、乡镇的表格之后,需要合并操作,每个表格的格式都是相同的,只是内容不同,最后需要汇总到一张表上。
样表
因为乡镇、街道比较多,而且名单经常会变动,一个个表格手动去汇总,比较繁琐,也容易出错。因此笔者尝试使用xlwings库实现表格的自动汇总。
2.实现
- 过程比较简单,完全按照正常逻辑思维编写代码。
1.获取目录下所有待合并excel单元格文件名
2.打开每一个excel单元格文件,将其中的内容保存至列表
3.打开目标表格
4.将列表内容保存至目标表格
- 代码实现
'''
Descripttion: 合并多个单元格至目标单元格
version: 1.0
Author: HK
Date: 2022-04-10 10:46:28
LastEditors: HK
LastEditTime: 2022-04-10 22:40:45
'''
import xlwings as xw
import os
import re
# 获取目录下的文件名
doc = os.listdir()
file_path_list = []
# 将表格文件的文件名保存至file_path_list(后缀为.xlsx)
for item in doc:
result = re.search('.*\.xlsx',item)
if result != None:
file_path_list.append(result.group())
# value_res列表来保存单元格的值
# 使用app来打开excel文件
# total_cols用来记录合并后列表的总行数
value_res = []
app = xw.App(visible=False,add_book=False)
total_cols = 0
for filename in file_path_list:
# 打开excel文件
wb = app.books.open(filename)
try:
# 获取该excel文件的行数
sht = wb.sheets("Sheet1")
info = sht.used_range
nrows = info.last_cell.row
# 将该excel文件的内容,逐行保存至列表
for i in range(2,nrows+1):
rng = "B%d:F%d" % (i,i)
item = sht.range(rng)
item.value[2] = str(item.value[2])
value_res.append(item.value)
total_cols = total_cols + 1
finally:
wb.save()
wb.close()
# res_filepath 是最终合并后的目标excel文件的地址
res_filepath = '../result.xlsx'
wb2 = app.books.open(res_filepath)
try:
wb2_sht = wb2.sheets["sheet1"]
format_rng = "C1:C%d" % (total_cols)
rng = "A1:F%d" % (total_cols)
wb2_sht.range(format_rng).api.NumberFormat = "@"
wb2_sht.range(rng).value = value_res
print("Successfully Entered")
except:
print("Something Happened")
finally:
wb2.save()
wb2.close()
app.quit()
网友评论