美文网首页
利用xlwings库,实现excel表格合并

利用xlwings库,实现excel表格合并

作者: 不懂球的2大业 | 来源:发表于2022-04-10 23:20 被阅读0次

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()

相关文章

网友评论

      本文标题:利用xlwings库,实现excel表格合并

      本文链接:https://www.haomeiwen.com/subject/ghmbsrtx.html