使用xlwings合并同一目录下多个Excel文件

14 篇文章 0 订阅

其实合并同一目录下的多个Excel文件,理论上用VBA是最好的,因为可以在复制粘贴的时候连格式一起,用python不好的地方就在于要把格式一起复制过去是很困难的。
当然如果对格式没什么太高的要求,那么使用xlwings合并Excel就绝对是一个很好的选择了
以下是实现代码,考虑到了excel内有多个sheet和标题行只需要复制一次的情况。

import xlwings as xw
import os
# 以上是导入两个必要的库,xlwings用来操作excel,os用来遍历文件夹
# 代码能运行的大前提是所有的excel的sheet数量是相同的,且每个sheet的字段都是相同的

app = xw.App(visible=False,add_book=False)
# 打开Excel,如果visible用false,则只在后台运行,add_book用false,不会新建一个空白的工作簿

# 先要遍历文件夹
path = r'd:\1' # 定义路径,OS提供了两种遍历文件夹的办法
# 例子中,文件夹1内有excel文件若干和一个子文件夹

# files1 = os.listdir(path)
# # 这是第一种,会遍历路径下所有文件包括子文件夹,结果以列表给出,但仅仅能给出文件名/子文件名,无法对二者进行区分
# # for file in files1:
# #     print(os.path.join(path,file))

files2 = os.walk(path)
# 这是第二种,通过walk函数,返回root(路径),dirs(子目录),files(文件名)三个元组,本例中我们用walk来遍历
def summary():
    for root , dirs , files in os.walk(path):
        for f in range(len(files)): # 遍历文件夹的设定到此结束,下面要开始使用xlwings进行调用
            wb = app.books.open(os.path.join(root,list(files)[f])) # 打开excel工作表
            sheet_count = wb.sheets.count # 查看wb里面一共有多少sheets,为遍历wb里的sheets做准备
            if f == 0: # 考虑到标题行,直接将第一个打开的工作簿另存为新工作簿
                wb.save(path + '\\' + 'new.xlsx') # 将第一个打开的wb另存为一个新的工作簿new.xlsx用于汇总
                wb.close() # 关闭wb
            else: # 当第二个工作簿打开的时候
                newwb = app.books.open(path + '\\' + 'new.xlsx') # 先把新建的汇总工作簿打开
                for s in range(sheet_count): # 开始遍历sheets
                    sht = wb.sheets[s]
                    nrow = sht.used_range.last_cell.row # 定义源工作簿中最后一行
                    ncol = sht.used_range.last_cell.column # 定义源工作簿中最后一列
                    newrow = newwb.sheets[s].range('A65536').end('up').row # 定义目标工作簿中最后一行
                    newwb.sheets[s].range('A'+str(newrow+1)).value = sht.range((2,1),(nrow,ncol)).value
                    # 将“源工作簿”中要复制的内容赋值给“目标工作簿”
                newwb.save(path + '\\' + 'new.xlsx') # sheets遍历结束后,保存源工作簿
                wb.close()
                # newwb.close() # 将打开的工作簿关闭,进入下一个循环
        app.quit() # 退出Excel
summary()
  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

White_Mountain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值