概述
其实合并同一目录下的多个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()
最后
以上就是调皮滑板为你收集整理的使用xlwings合并同一目录下多个Excel文件的全部内容,希望文章能够帮你解决使用xlwings合并同一目录下多个Excel文件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复