python办公自动化之——批量复制带格式的excel到汇总表

我们在对每周,每月,季度,年度等各区销售数据或者个人工作汇总时,会涉及将每个地区或者每个人的工作表汇总的情况,一个一个复制是可以的,但表格较多的时候每次都这样操作显然是很浪费时间的 ,这里介绍使用python批量将各单独的excel带格式复制到新表格的方法。
以下是某款APP每年各月的用户活跃情况表,我们需要将每年的数据汇总到一张总表格中,原始数据如下:


最近6年的原始数据表格

示例代码如下:

from win32com.client import Dispatch # 导入win32com模块
import os  # 导入操作系统模块
'''
复制Sheet页到另一个Excel文件
   filepath:要遍历的目录
   filelist:要复制的Excel文件列表
   targetfilename:新生成的Excel文件的名称
'''
def copysheet(filepath, filelist,targetfilename):
    excelapp = Dispatch('Excel.Application') # 创建Excel应用对象
    excelapp.visible = 1 # 此行设置打开的Excel表格为可见状态;忽略则Excel表格默认不可见
    targetfile = excelapp.Workbooks.Add() #新建Excel文件
    targetws_list = targetfile.Worksheets
    for filename in filelist:   # 遍历Excel文件列表
        filesplit = filename.split('.')
        if filesplit[-1] == 'xlsx' or filesplit[-1] == 'xls':  # 判断是否为Excel文件
            excelfile = excelapp.Workbooks.Open(filepath + '\\' + filename)  # 打开一个Sheet页
            ws = excelfile.Worksheets
            ws.Copy(None,targetws_list(1)) #跨表复制,插入到第一个Sheet页之后
            excelfile.Close(SaveChanges=1)
        else:
            pass # 占位符,不执行操作
    targetws_list[0].Delete()  # 删除默认创建的Sheet1
    targetfile.SaveAs(filepath + targetfilename)  # 保存Sheet页到新Excel文件中
    targetfile.Close(SaveChanges=1)  # 关闭Excel文件
    excelapp.quit()    # 退出Excel应用对象
'''获取指定目录下的文件
   filepath:要遍历的目录
   filelist_out:输出文件列表
   file_ext:文件的扩展名,默认为任何类型的文件
'''
def getfilenames(filepath='',filelist_out=[],file_ext='all'):
    # 遍历filepath下的文件
    for filename in os.listdir(filepath):
        if file_ext == '.xlsx':  # 遍历Word文档文件
            if os.path.splitext(filename)[1] in ['.xlsx','.xls']:
                filelist_out.append(filename) # 添加到路径列表中
        else:
            if  file_ext == 'all':  # 遍历全部文件
                filelist_out.append(filename) # 添加到路径列表中
            elif os.path.splitext(filename)[1] == file_ext:
                filelist_out.append(filename)  # 添加到路径列表中
            else:
                pass
    filelist_out.sort(reverse=True)  # 对列表进行排序
    return filelist_out  # 返回文件完整路径列表

if __name__ == '__main__':
    filepath = r"C:\data"  # Excel文件保存的路径
    copysheet(filepath, getfilenames(filepath, [], '.xlsx'), r'\近6年数据汇总.xlsx')  # 合并多个Sheet页

运行结果如下 ,能快速将各excel表汇总到一个总表中:


汇总后的年度数据

注:这里没有进行表格名字排序,或者重命名,后续更新~

参考资料:《python编程锦囊》明日科技。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容