Python办公自动化实战:Excel汇总、Word批量生成、PPT自动搭建
2026/9/3 3:34:39 网站建设 项目流程

把 Python 用于办公自动化,是 Python 入门阶段见效最快的一组实践。很多人学完语法后不知道能做什么,而 Excel、Word、PPT 恰恰是办公室里最普遍、重复度最高的文件类型。真正的场景往往不是“用 Python 做一个小游戏”,而是月底汇总几十个 Excel、给几十个客户生成不同的 Word 回函、把一段数据快速放进 PPT 模板里。

这篇文章会围绕一个明确主线展开:用 Python 操作 Excel、Word、PPT 三个真实办公场景,从环境准备到代码实现,再到运行结果和常见坑。全程不会依赖复杂的 Web 框架,也没有难懂的设计模式,只需要 Python 基础语法、循环、字符串替换,以及理解函数和路径即可。看完后,你可以直接把手头重复的表格合并、文档生成、PPT 搭建任务拆成脚本,而不是继续用鼠标重复操作。

有一点要先说明:办公自动化不是为了写“炫技”代码,而是为了解决真实业务问题。文字少、代码能跑、异常能查、生成结果能验证,这四点比代码风格重要得多。

1. 先想清楚:Python 办公自动化到底处理哪类工作

1.1 办公自动化不是把 Python 变成 Office 插件

Python 办公自动化最常见的误解是“用 Python 模拟鼠标键盘去点击 Office”。确实有 pyautogui 这类库能做界面控制,但它脆弱、易受屏幕分辨率影响,也容易打断正常办公。真实项目中更可靠的思路是走文件级处理:Python 直接读取 Excel 文件内容、直接生成 docx 文档、直接编辑 pptx 演示文稿,而不是先打开 Office 再逐个点击按钮。

这样做有几个明显收益:

  • 不依赖本机是否安装 Office,也不需要用户手动弹出窗口。
  • 处理速度比人工快很多,几十个文件可以循环批量完成。
  • 生成结果可以复查,比如统计行数、检查字段是否为空、打印剩余占位符。
  • 可以纳入定时任务,例如每天早晨自动生成昨日统计 PPT。

所以这里安排的案例都基于结构化文件解析,而不是鼠标模拟。Excel 用 openpyxl 与 pandas,Word 用 python-docx,PPT 用 python-pptx。它们处理的是 Office Open XML 格式,也就是常见的 xlsx、docx、pptx 文件。

1.2 三个案例分别对应三种典型重复劳动

办公场景典型人工工作Python 解决的问题
Excel 数据汇总打开多个表格,复制粘贴到一张总表,再按区域或月份统计自动合并工作簿、统一字段、生成统计 sheet
Word 文档批量生成基于一份模板,给不同人员填充姓名、部门、金额等内容批量替换占位符,一份模板生成多份文件
PPT 内容批量搭建把会议结论、周报数据复制到多页 PPT根据数据自动创建页面、标题、正文和图表

这三种场景已经覆盖了绝大多数办公自动化的第一层需求。它们之间还能继续衍生:Excel 里存的是数据,Word 和 PPT 是数据的呈现出口,所以完整项目里通常先写 Excel 处理脚本,再写 Word 和 PPT 生成脚本,形成一条自动化链路。

先建立这种框架,后面看到代码时才不会一头扎进某个 API 细节。

2. 环境准备:Python 版本、依赖库与目录结构

2.1 Python 环境基本要求

实际操作前,先确认电脑上有可用的 Python 环境。在命令行里执行:

python --version

如果提示“python 不是内部或外部命令”,通常是因为安装 Python 时没有勾选“Add Python to PATH”。建议重新运行安装包,把 Python 添加到 PATH,或者通过 Python 自带的 py 启动器检查:

py --version

本文中的代码不需要 Python 的特殊新语法,使用常见的 Python 3.8 以上版本即可。版本太低会影响 pandas 等依赖库的兼容性,所以不要停留在 Python 2.x 时代。

2.2 安装 openpyxl、pandas、python-docx、python-pptx

安装依赖前,建议先切换到自建的虚拟环境,或者在当前命令行中直接安装。使用下面的命令:

python -m pip install --upgrade pip python -m pip install openpyxl pandas python-docx python-pptx

使用python -m pip而不是直接执行pip,可以避免电脑上存在多个 Python 版本时装错环境。如果下载速度慢,可以指定国内镜像源:

python -m pip install openpyxl pandas python-docx python-pptx -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成后,用下面的命令验证四个库是否都能正常导入:

python -c "import openpyxl, pandas, docx, pptx; print('ok')"

这里有一个容易忽略的地方:openpyxl 是 pandas 读写 xlsx 文件的后端,所以即使只用 pandas,也需要把它安装上。python-docx 的导入名是 docx,python-pptx 的导入名是 pptx,如果 ImportError 提示找不到模块,检查安装名是否写错。

2.3 建议先建立统一的项目目录

办公自动化往往会读取多个输入文件,生成多个输出文件。如果所有文件都堆在桌面,脚本会越来越难看懂。这里给出一个适合练习和真实项目的目录结构:

office_auto/ ├── input/ │ ├── excel/ │ ├── word/ │ └── ppt/ ├── output/ │ ├── excel/ │ ├── word/ │ └── ppt/ └── scripts/

input 目录放原始文件,output 目录放生成结果,scripts 目录放 Python 脚本。这样做的原因是 Python 脚本中经常需要写路径,把路径统一到相对位置后,代码在同事电脑上也能跑,不用手动改一堆绝对路径。建议在 scripts 目录下创建脚本,并保证启动 Python 时的工作目录在 office_auto 根目录下,这样所有相对路径都可读。

可以在项目根目录写一个简单脚本,自动创建这些文件夹:

from pathlib import Path for sub in ["excel", "word", "ppt"]: Path("input", sub).mkdir(parents=True, exist_ok=True) Path("output", sub).mkdir(parents=True, exist_ok=True)

将 names 中的路径放到脚本的同级目录更合适。

3. Excel 自动化真实案例:多个表格汇总并按区域统计

3.1 场景描述:几十张销售明细,最终只要一张总表

真实办公中,Excel 自动化最常出现在数据汇总。假设销售团队每周发来不同区域的明细,文件如下:

input/excel/ ├── 华东_销售明细.xlsx ├── 华南_销售明细.xlsx └── 华北_销售明细.xlsx

每个文件都有一个名为“销售明细”的 sheet,表头包含:区域、销售员、产品、金额、日期。过去人工做法是逐个打开文件,复制数据到总表,再创建透视表按区域统计金额。现在可以用 pandas 一次性完成合并和统计。

3.2 合并代码:读取、拼接、写出汇总文件

以下代码放在 scripts/excel_merge.py:

from pathlib import Path import pandas as pd input_dir = Path("input/excel") output_dir = Path("output/excel") output_dir.mkdir(parents=True, exist_ok=True) frames = [] for file in input_dir.glob("*.xlsx"): df = pd.read_excel(file, sheet_name="销售明细", engine="openpyxl") df["来源文件"] = file.name frames.append(df) print(f"{file.name} 读取完成,行数:{len(df)}") if not frames: raise SystemExit("没有找到任何 xlsx 文件,请检查 input/excel 目录") merged = pd.concat(frames, ignore_index=True) print(f"合并后总行数:{len(merged)},列名:{list(merged.columns)}") region_stat = ( merged.groupby("区域", as_index=False)["金额"] .sum() .sort_values("金额", ascending=False) ) with pd.ExcelWriter(output_dir / "销售数据汇总.xlsx", engine="openpyxl") as writer: merged.to_excel(writer, index=False, sheet_name="汇总") region_stat.to_excel(writer, index=False, sheet_name="区域统计") print(f"生成文件:{output_dir / '销售数据汇总.xlsx'}")

这段代码有几个关键点需要解释。

Path("input/excel").glob("*.xlsx")会遍历目录下所有以 .xlsx 结尾的文件。使用 pathlib 而不是手写字符串路径,可以避免 Windows 路径分隔符带来的问题。

pd.read_excel(file, sheet_name="销售明细")指定读取指定名称的 sheet。如果输入文件的 sheet 名称不统一,可以改成读取第一个 sheet,例如sheet_name=0,不过这会带来列结构不一致的风险。

pd.concat默认按列名对齐。如果三个文件的列顺序不同也没关系,只要列名一致就能正确拼接。

写入 Excel 时使用pd.ExcelWriter,这样可以一次性写多个 sheet,最终文件里既有全部明细,也有按区域汇总后的统计表。

3.3 补充:没有现成 Excel 文件时,先用脚本生成测试数据

如果手边没有业务数据,可以先运行下面这段脚本造一个最小测试文件,方便验证上面的合并流程:

from pathlib import Path import pandas as pd samples = { "华东_销售明细": [ {"区域": "华东", "销售员": "张伟", "产品": "平板", "金额": 3200, "日期": "2025-01-06"}, {"区域": "华东", "销售员": "李娜", "产品": "键盘", "金额": 890, "日期": "2025-01-06"}, ], "华南_销售明细": [ {"区域": "华南", "销售员": "王强", "产品": "显示器", "金额": 2100, "日期": "2025-01-06"}, {"区域": "华南", "销售员": "周敏", "产品": "鼠标", "金额": 150, "日期": "2025-01-06"}, ], } for name, rows in samples.items(): df = pd.DataFrame(rows) df.to_excel(Path("input/excel", f"{name}.xlsx"), index=False, sheet_name="销售明细")

创建测试数据后,再运行合并脚本,就能看到输出结果。

3.4 运行验证与预期输出

在 office_auto 根目录下执行:

python scripts/excel_merge.py

正常情况会看到类似输出:

华东_销售明细.xlsx 读取完成,行数:2 华南_销售明细.xlsx 读取完成,行数:2 合并后总行数:4,列名:['区域', '销售员', '产品', '金额', '日期', '来源文件'] 生成文件:output/excel/销售数据汇总.xlsx

验证不能只看脚本没有报错。打开 output/excel/销售数据汇总.xlsx,确认“汇总” sheet 有 4 行数据,“区域统计” sheet 里华东和华南的金额相加结果正确。

3.5 Excel 自动化最常见的三个坑

第一个坑是路径中存在中文或特殊符号。大多数情况下 openpyxl/pandas 能处理中文路径,但某些运行环境的编码问题会导致 FileNotFoundError。遇到这种情况,先打印完整路径,确认当前工作目录是否正确,而不是直接怀疑文件不存在。

第二个坑是读取带公式的单元格。openpyxl 默认读取公式本身,而不是计算后的结果。也就是说,如果单元格里是=SUM(B2:B10),pandas 读入的可能是公式字符串,而不是求和结果。如果数据来自别人填写的 Excel,建议清洗数据阶段先查看公式是否存在,必要时用openpyxl.load_workbook(path, data_only=True)读取缓存值。但如果文件没有经过 Office/WPS 打开保存,Excel 可能不保存缓存值。

第三个坑是丢失格式。合并生成的 Excel 不包含原表的颜色、字体、合并单元格样式。不要把 Excel 自动化理解为“复制一份带格式的表格”,它更适合做数据处理和内容生成。如果业务上必须保留原格式,需要基于 openpyxl 单独复制样式,这会显著增加代码量。

4. Word 自动化真实案例:从 Excel 数据批量生成在职证明

4.1 场景描述:一份 Word 模板,换人换岗反复填

Word 场景的典型问题是模板重复填写。比如财务、人事部门经常要开“在职证明”,模板内容固定,只需要根据员工信息发生变化。人工做法是把同一个 Word 文件复制很多份,逐份改姓名、部门、岗位。风险是容易漏改,而且文件命名难以统一。

正确做法是:准备一份带占位符的 Word 模板,再让 Python 根据 Excel 里的员工信息逐个生成新的 docx 文件。

4.2 准备 Word 模板和员工数据

在 Word 中创建一个新文档,内容如下:

在职证明 兹证明 {{姓名}},身份证号:{{身份证号}},为我公司正式员工。 该员工当前部门为 {{部门}},岗位为 {{岗位}}。 特此说明。 人力资源部 2025年1月10日

保存为input/word/在职证明模板.docx。这里的{{姓名}}不是自动生成的域,而是普通文本占位符,方便 Python 用字符串替换找到位置。

员工信息放在 Excel 文件input/excel/员工信息.xlsx中:

姓名身份证号部门岗位
张三310101199001011234研发部高级工程师
李四310101199202023456市场部市场专员
王五310101199303034567财务部会计

4.3 批量生成 Word:读取模板、替换占位符、另存文件

Word 的 python-docx 库处理对象是 Document。使用方式:

from pathlib import Path import pandas as pd from docx import Document template_path = Path("input/word/在职证明模板.docx") info_path = Path("input/excel/员工信息.xlsx") output_dir = Path("output/word") output_dir.mkdir(parents=True, exist_ok=True) df = pd.read_excel(info_path, engine="openpyxl") def replace_in_paragraph(paragraph, mapping): changed = False for run in paragraph.runs: for key, value in mapping.items(): if run.text and key in run.text: run.text = run.text.replace(key, str(value)) changed = True return changed def find_remaining_placeholders(paragraphs, keys): remaining = [] for p in paragraphs: for key in keys: if key in p.text: remaining.append(key) return remaining for _, row in df.iterrows(): doc = Document(template_path) mapping = { "{{姓名}}": row["姓名"], "{{身份证号}}": row["身份证号"], "{{部门}}": row["部门"], "{{岗位}}": row["岗位"], } for p in doc.paragraphs: replace_in_paragraph(p, mapping) for table in doc.tables: for tr in table.rows: for cell in tr.cells: for p in cell.paragraphs: replace_in_paragraph(p, mapping) leftover = find_remaining_placeholders(doc.paragraphs, mapping.keys()) if leftover: print(f"{row['姓名']} 仍有未替换占位符:{set(leftover)}") out_file = output_dir / f"{row['姓名']}_在职证明.docx" doc.save(out_file) print(f"已生成:{out_file}")

运行:

python scripts/word_batch_gen.py

输出结果应为:

已生成:output/word/张三_在职证明.docx 已生成:output/word/李四_在职证明.docx 已生成:output/word/王五_在职证明.docx

每个文件打开后,模板中的占位符会被替换为员工信息,未使用到的占位符不会影响其他内容。

4.4 为什么推荐 run 替换,而不是整体替换段落文本

很多人第一次写 Word 替换时,会试图这样写:

doc = Document(template_path) for p in doc.paragraphs: p.text = p.text.replace("{{姓名}}", "张三")

这段代码会报错,因为paragraph.text在 python-docx 中是一个只读属性,不能直接赋值。即使通过其他方案强行替换整个段落,也容易出现格式丢失,因为一个段落可能由多个 run 组成,每个 run 有自己的字体、字号、颜色。Word 把“姓名:张三”保存为多个 run,是正常现象。

所以上面的代码遍历paragraph.runs,只在命中的 run 内做替换。如果占位符恰好被 Word 拆到多个 run 中,简单替换会失效,此时程序会通过剩余占位符检查给出提示。实际处理这种情况需要操作底层 XML 或调整模板输入方式,最简单的规避方案是把每个占位符单独输入成一段,或者确保变量在 Word 中处于同一个 run。

为了避免生成成功后才发现内容不对,脚本中加入了find_remaining_placeholders检查。只要还有字段未替换,就在控制台明确打印。这是生产脚本比演示脚本更有价值的细节。

4.5 Word 操作中的文件格式和宏相关坑

python-docx 只能处理 .docx,不能处理老版本的 .doc。如果公司资料还是 .doc 格式,先通过 Office 另存为 .docx,再交给 Python 处理。

很多新手会混淆“Word 宏”与“Word 文档生成”。如果在打开生成文件时看到“无法找到宏或宏被禁用”,通常说明文档不是启用宏的文档,或者 Office 宏安全设置隔离了 VBA 代码。python-docx 本身不执行宏,它只负责写入文本、表格、样式等内容。如果业务要求保留宏,python-docx 生成的文档会很难满足,建议改用 VBA 方案,而不是硬啃 python-docx 的 XML 扩展。

还要注意,如果生成文件时 Word 正打开同名文件,docx.Document.save()会抛出 PermissionError。办公场景下,不要开着源文件或输出文件直接跑脚本,养成先关闭 Office 文件再运行的习惯。

5. PPT 自动化真实案例:用数据自动生成多页汇报 PPT

5.1 场景描述:周报页面重复,内容却来自不同数据

PPT 自动化的核心价值不是让你做出精美设计,而是把周报、月报、项目进度汇报中的重复页面批量搭出来。比如每页幻灯片只需要替换标题、五条正文要点、一组数字,手动制作 50 页非常费时间,用脚本生成却只需要几秒。

python-pptx 库的作用,是读取 .pptx 文件中的幻灯片、占位符、文本框。它不依赖 PowerPoint 软件本身,所以可以在没有安装 Office 的服务器上运行。

5.2 使用默认模板生成标题页和正文页

下面的脚本不依赖外部模板,能够直接生成一个包含标题页和多页正文的 PPT:

from pathlib import Path from pptx import Presentation from pptx.util import Pt output_dir = Path("output/ppt") output_dir.mkdir(parents=True, exist_ok=True) prs = Presentation() file_path = output_dir / "项目周报.pptx" # 第一页:标题页 title_slide = prs.slides.add_slide(prs.slide_layouts[0]) title_slide.shapes.title.text = "2025年1月第二周项目周报" title_slide.placeholders[1].text = "汇报人:测试团队" # 第二页:标题和正文列表 bullet_slide = prs.slides.add_slide(prs.slide_layouts[1]) bullet_slide.shapes.title.text = "本周完成事项" body = bullet_slide.placeholders[1].text_frame first_p = body.paragraphs[0] first_p.text = "完成登录模块接口联调" first_p.level = 0 items = [ "修复退款流程中的金额精度问题", "完成新版本部署脚本", "补充核心接口的异常日志", ] for item in items: p = body.add_paragraph() p.text = item p.level = 1 # 第三页:同样结构的另一组内容 bullet_slide2 = prs.slides.add_slide(prs.slide_layouts[1]) bullet_slide2.shapes.title.text = "下周计划" body2 = bullet_slide2.placeholders[1].text_frame body2.paragraphs[0].text = "完成自动化测试用例补充" body2.paragraphs[0].level = 0 prs.save(file_path) print(f"已生成:{file_path}")

运行后打开生成的 PPT,可以看到默认模板自带的多页幻灯片。通过prs.slide_layouts[0]prs.slide_layouts[1]分别选择“标题幻灯片”和“标题和内容”布局。

5.3 第一个占位符和第二个占位符的区别

placeholder是 PowerPoint 幻灯片中的可编辑区域,通常有固定编号。常见规则是:

placeholder 编号常见位置含义
0页面顶部大标题主标题
1标题下方正文区域副标题或正文

title_slide.shapes.title本质上是编号为 0 的占位符。title_slide.placeholders[1]通常是副标题。

使用标题和内容布局时,placeholders[1]存放正文列表。它的text_frame默认已经包含一个空段落,所以第一次添加条目不要调用add_paragraph(),而是先修改paragraphs[0]。后面的条目才调用add_paragraph()

这个细节非常容易忽略。如果对空段落再执行一次add_paragraph(),前面会出现一个空行,导致最终 PPT 的开头多出一条空白文本。

5.4 基于公司模板改造

实际办公中,很多公司已经有标准 PPT 模板,里面的字体、配色、尺寸都固定好了。这时不要新建空白Presentation(),而是直接读取模板:

from pptx import Presentation prs = Presentation("input/ppt/公司项目汇报模板.pptx")

读取模板后,prs.slide_layouts会变成该公司模板自带布局,通常比 blank 模板复杂度更高。先打印一下布局数量和每个布局的占位符编号,再决定使用哪个布局:

for idx, layout in enumerate(prs.slide_layouts): print(idx, layout.name) for ph in layout.placeholders: print(" 占位符编号", ph.placeholder_format.idx, "类型", ph.placeholder_format.type)

运行这段调查代码,可以避免脚本报KeyError: 11或生成后内容乱放。公司模板里第 1 页是封面、第 2 页是目录、第 3 页可能是页眉文字,按视觉习惯进入第 3 页时,实际占位符编号可能与第 2 节不同。

5.5 PPT 生成的验证方法

生成 PPT 后,最简单的验证是打开文件检查页数、标题和正文条目。自动化验证可以读取生成文件,再次用 python-pptx 打开,然后遍历幻灯片:

from pptx import Presentation prs = Presentation("output/ppt/项目周报.pptx") for slide_index, slide in enumerate(prs.slides, start=1): texts = [] for shape in slide.shapes: if shape.has_text_frame: texts.append(shape.text_frame.text.replace("\n", "/")) print(f"第 {slide_index} 页:{texts}")

如果输出结果是空列表,说明文本没有写入预期的文本框,需要回到脚本检查占位符编号。

6. 常见报错与排查链路

6.1 用一条路径排查所有 Office 文件脚本

办公自动化的报错往往不是代码语法错,而是文件路径、文件格式、运行环境三者不一致。出现问题时,建议从下往上一层一层查:

  1. 文件是否真实存在?打印Path(file).exists()
  2. 文件扩展名是否正确?Excel 要用 .xlsx,Word 要用 .docx,PPT 要用 .pptx。
  3. 当前工作目录是否正确?脚本中常用相对路径,如果从其他目录运行,路径可能失效。
  4. 文件是否正在被 Office/WPS 打开?被打开时可能无法写入或读取。
  5. 库是否安装到了当前 Python 环境?重新执行python -m pip list确认。
  6. 是否出现文件名为空或含特殊字符?建议先改成英文或去掉空白字符测试。
  7. 是否混淆了 DataFrame 与 Excel sheet?打印df.head()df.columns再决定写什么。

6.2 常见异常对照表

异常信息出现场景常见原因处理方向
FileNotFoundError读取 Excel/Word/PPT相对路径不对,文件不在预期目录打印绝对路径,确认当前工作目录
PermissionError保存文件同名文件被 Office 占用关闭相关 Office 窗口,或改名输出
ImportError: No module named openpyxl运行 Excel 读取未安装 openpyxl 或安装在别的环境python -m pip install openpyxl
PackageNotFoundError打开 PPT/Word文件不是合法 Office 文档或扩展名错误确认是 .docx/.pptx,而不是改名得到的内容
KeyError: 0 或 KeyError: 11PPT placeholders当前布局中没有对应编号的占位符打印 layout.placeholders 查看实际编号
AttributeError: 'Paragraph' object has no attribute 'text' 的赋值Word 替换对不可写属性直接赋值遍历 runs 替换,或使用文档级重写方法
pandas 读出的表格列名有 NaNExcel sheet表头存在合并单元格或空行先调整 Excel 表头,再进行 concat

6.3 控制台没有报错,但生成文件不符合预期怎么办

自动化脚本最隐蔽的问题不是报错,而是“能运行但结果错”。

Excel 场景可以这样核对:生成文件前打印合并后的行数、列数、空值数量,再抽查某一行的字段。最好在代码中加两个断言:

assert len(merged) == sum(len(fr) for fr in frames) assert merged[["区域", "金额"]].notna().all().all()

Word 场景要检查模板中的占位符是否全部替换。如果输出文件还留有{{姓名}},客户收到后会觉得文档写错了。建议在脚本末尾遍历一遍所有段落和表格,把剩余占位符打印出来。

PPT 场景要检查标题和正文是否放到了预期文本框中。除了控制台打印,最好把每页文本作为纯文本保存成 txt,然后逐页人工抽样。

7. 最佳实践:把办公自动化脚本写得能长期使用

7.1 每个项目保留一份“开始前检查清单”

真实办公中,脚本不是只跑一次。下周、下月、下一年还会继续用,所以脚本质量决定了维护成本。建议每次运行前检查下面几项:

  • 输入目录中的文件是否齐全,是否存在临时文件副本。
  • Excel 的 sheet 名称是否统一,列名是否一致。
  • Word 模板中占位符是否与代码中 mapping 的 key 完全一致。
  • PPT 模板是否被换过,换模板后是否重新确认了布局编号。
  • 输出文件是否与目标文件重名,重名时是否需要覆盖。
  • Python 环境中依赖库是否依然存在,换电脑后是否需要重新安装。

7.2 学习环境与生产环境的差别要分开

练习时可以直接把路径写死在脚本里,但生产环境建议做三件事:

第一,路径外置。把 input、output、template 三个路径放到一个配置文件或脚本头部常量中,不要散落在不同函数里。

第二,增量处理和错误隔离。处理多个 Excel 时,如果其中一个文件格式不正确,理想情况是记录错误后继续处理其他文件,而不是中断整个任务。可以用 try 包裹单文件读取逻辑:

for file in input_dir.glob("*.xlsx"): try: df = pd.read_excel(file, engine="openpyxl") except Exception as exc: print(f"{file.name} 处理失败:{exc}") continue frames.append(df)

第三,输出文件使用独立修改的临时名或生成失败后回滚策略。例如先生成到临时文件,确认成功后再改名覆盖。简单业务可以不做得那么重,但批量生成几十个 Word 时,如果中途某个文件写坏,已经写入的垃圾文件会很麻烦。

7.3 不追求“一行代码”,而追求“能解释每一步”

网上很多视频标题会用“Excel 合并几行代码搞定”,但真正到项目里,你还是要理解读文件、处理数据结构、写文件这三个阶段。代码行数少并不重要,重要的是遇到报错时你能知道问题出在库、文件、路径、格式还是数据本身。

对于刚学 Python 的读者,建议按这个顺序练习:

  1. 先运行文中的三个脚本,确认环境无误。
  2. 把 Excel 合并脚本改成按月份统计。
  3. 把 Word 生成脚本改成生成客户回款通知。
  4. 把 PPT 脚本改成读取上一段的销售数据汇总.xlsx,把统计结果自动填到 PPT 中。
  5. 最后尝试用 schedule 或系统的计划任务,让脚本定时执行。

这样练完后,你已经不再纠结某一个库的 API,而是能按真实需求拆解任务。办公自动化对你来说,就从一个“看起来很酷的标签”变成了真正能减少重复劳动的工作方法。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询