美文网首页
利用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