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

2022-04-10  本文已影响0人  不懂球的2大业

1.需求背景

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()
上一篇下一篇

猜你喜欢

热点阅读