Python:保留原格式复制万份Excel表格到汇总表,并自动生成目录

liftword2个月前 (03-01)技术文章12

摘要: 工作中,经常需要将很多独立的excel表格按照顺序复制汇总到单个工作簿中,并且要求保留原表格的格式,且要生成目录页。使用excel自带的“移动或复制”可以实现,但是纯手工操作,需要一个一个打开并复制到新的表格。目录也要手动“复制粘贴”。

你是否也曾被这样繁琐重复的汇总工作折磨得筋疲力尽?现在,用Python自动化工具,几秒钟就完成了原本需要几天的工作量,彻底告别了枯燥与低效!


引言

微信公众号粉丝小李担任公司的办公室主任。每月,他都要执行一项看似简单却极其繁琐的任务:将来自不同部门的Excel报告按照原格式汇总到一个工作簿中,并在工作簿的第一个表里形成目录,供领导层审阅。这不仅是一项重复性极高的工作,而且手工操作一次表格就需要几分钟,而每月的报告数量多达上百份。

1.小李的挑战

小李在微信公众号上留言说:“我每个月都要汇总各部门的报告,挨个打开Excel表格,然后‘移动复制表格到汇总表里’,再手动在第一张表里添加上目录。这样的工作重复性高,耗时长,让我感到非常疲惫。”

2.传统方法的局限

小李之前的做法是:

  • 逐个打开每个Excel文件
  • 使用Excel的“移动或复制”功能,将每个工作表粘贴到汇总表中。
  • 手动在汇总表的第一张工作表里添加目录,指向每个部门的报告。
  • 面对每月上百份的报告,需要重复操作数百次。

3.Python自动化的解决方案

我们为小李提供了一个Python脚本,能够自动将多个独立的Excel表格按照顺序汇总到单个工作簿中,并保留原表格的格式,同时自动生成目录页。

import os  # 用于获取目标文件所在路径
import win32com
import win32com.client




path = os.getcwd()+"\\文件\\"  # 文件夹绝对路径
files = []
for file in os.listdir(path):
    if file.endswith(".xls") or file.endswith(".xlsx"):  # 只获取".xls"后缀的文件
        files.append(path+file)




excel_app = win32com.client.Dispatch("Excel.Application")
excel_app.Visible = False  # 不显示Excel文件
excel_app.DisplayAlerts = False


# 新建excel工作簿
wb = excel_app.Workbooks.Add()
wb.SaveAs(os.getcwd() + "\\汇总.xlsx")
ws = wb.Worksheets(1)
ws.Name = "目录"
for i in range(len(files)):
    file_name = files[i].split("\\")[-1].split(".")[0]
    ws.Range("A"+str(i+1)).Value = file_name
    # 读取子文件
    wb_sub = excel_app.Workbooks.Open(files[i])
    ws_sub = wb_sub.ActiveSheet  # 获取活动工作表


    ws_sub.Copy(ws)  # 复制工作表到汇总表
    wb.ActiveSheet.Name = file_name  # 更改工作表名
    wb_sub.Close()
    print(f"已复制文件 {file_name}")




# 将“目录”工作表移动到最前面
first_sheet = files[0].split("\\")[-1].split(".")[0]
wb.Worksheets("目录").Move(wb.Worksheets(first_sheet))


wb.Save()
wb.Close()
excel_app.Quit()

4.效果展示

使用我们的脚本,小李现在可以在几秒钟内完成之前需要几天的工作。这个自动化工具不仅提高了效率,还减少了因手动操作导致的错误。更重要的是,它自动生成的目录页,使得领导层能够快速定位到每个部门的报告。


结语

Python自动化不仅仅是编程技巧的展示,更是一种工作方式的革新。它能够帮助我们从重复性劳动中解放出来,让我们有更多时间去做更有创造性的工作。小李的故事证明了自动化的力量,希望他的经历能够激励更多的人去探索和利用Python自动化办公的无限可能。


如果你也像小李一样,面临着重复性工作的苦恼,或者对Python脚本的编写有任何疑问,欢迎在评论区留言,我们将为你提供一对一的技术支持!


尾注: 本文为原创技术文章,转载请标明出处。如果你喜欢本文,别忘了点赞、转发和关注我们的公众号,获取更多技术干货!



数海丹心

大数据和人工智能知识分享与应用

132篇原创内容

公众号



相关文章

用Python复制文件的9个方法_python怎么复制文件到另一个地方

Python 中有许多“开盖即食”的模块(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在这篇文章中,你将会看到一些用 Python 实现文件复制的特殊方法。下面我们开...

Python 文件复制必备技巧:保留原数据、递归复制目录,效果惊艳

引言:使用 shutil 模块来拷贝文件夹下的所有内容到指定目录。会递归地拷贝整个目录及其所有内容(包括子目录和文件)Python 3.8 或更高版本import shutil import os...

python每日一练之如何copy_python中copy用法

概述今天主要来看看Python中的浅拷贝和深拷贝内容,这里用一个实例来说明~需求:将一个列表的数据复制到另一个列表中。思路:使用列表[:],拿不准可以调用copy模块。实现方法:#!/usr/bin/...

Python复制文件的9种办法 :一文全。

Python复制文件 11 分钟阅读将文件从一个目录复制到另一个目录是一项常见的任务。Python 有许多模块(如 os、subprocess 和 sh-util)来支持文件复制。从这篇文章中,可以获...

linux下文件和目录的拷贝或移动_linux目录拷贝命令

05.linux下文件和目录的拷贝或移动Treetree命令可以以树状图列出文件目录结构使用 -d 选项只显示目录直接使用tree命令显示当前目录的结构;使用tree [目录名]可以显示指定目录的目录...

Python浅拷贝深拷贝之copy、deepcopy

笔记记录20221205:个人总结:1,两者基本区别不大;2,在涉及到子对象时候,两者才有区别;3,在涉及到子对象,且子对象的操作后内存地址没有发生变化(如下方代码:dic1['one'].appen...