Python自动化办公实战指南

Python 自动化办公,适合处理规则明确、重复频繁、输入输出格式相对稳定的任务,例如: 按日期或编号批量整理文件、提取文件名信息。 合并多个 Excel 或 CSV,清理空行、统一日期和字段格式。 根据表格内容生成 Word 文档、PDF 或汇总报表。 从内部系统或公开网页读取信息,填入表格。 定时运行报表、文件归档

Python 自动化办公,适合处理规则明确、重复频繁、输入输出格式相对稳定的任务,例如:

Python自动化办公实战指南

  • 按日期或编号批量整理文件、提取文件名信息。
  • 合并多个 Excel 或 CSV,清理空行、统一日期和字段格式。
  • 根据表格内容生成 Word 文档、PDF 或汇总报表。
  • 从内部系统或公开网页读取信息,填入表格。
  • 定时运行报表、文件归档等日常任务。

适合自动化的流程通常有清楚的输入、固定的处理规则和可检查的输出。需要人工判断的环节,例如审批、合同条款解释、异常数据取舍,仍应由人确认。开始前先把现有流程写成几步:输入文件在哪里、怎样判断有效数据、要生成什么结果、遇到异常怎么办。规则越明确,程序越容易维护。

准备 Python 环境

先安装适合当前操作系统的 Python。Windows 安装时可勾选将 Python 添加到 PATH;安装后在终端确认:

python --version

有些系统需要使用 python3。建议每个项目单独创建虚拟环境,避免不同项目依赖互相影响。

mkdir office_task
cd office_task

**Windows**
python -m venv .venv
.venv\Scripts\activate

**macOS 或 Linux**
python3 -m venv .venv
source .venv/bin/activate

激活环境后安装需要的库:

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

不同任务选择不同工具:

任务 常用工具
路径、文件名和目录 Python 标准库 pathlib、shutil
CSV 标准库 csv,或 pandas
Excel 数据清洗、统计、合并 pandas
Excel 单元格、样式和工作表操作 openpyxl
Word 文档 python-docx
网页交互 Playwright

依赖安装后,可以把项目依赖记录下来,方便在另一台电脑上复现:

python -m pip freeze > requirements.txt

在新环境中按文件安装:

python -m pip install -r requirements.txt

从安全的文件操作开始

文件整理常是最容易上手的自动化任务。使用 pathlib 处理路径,比自己拼接斜杠更适合跨平台。批量修改前,先打印计划结果;确认无误后再执行。

下面的例子把目录中的图片按文件名添加统一前缀。它会跳过目标文件已经存在的情况,避免覆盖:

from pathlib import Path

folder = Path("待整理")
prefix = "归档_"

for path in folder.iterdir:
    if not path.is_file:
        continue

new_path = path.with_name(prefix + path.name)

if new_path.exists:
        print(f"跳过,目标已存在:{new_path.name}")
        continue

print(f"计划:{path.name} -> {new_path.name}")
    # 确认计划无误后,取消下一行注释
    # path.rename(new_path)

如果要按文件创建时间、编号或表格中的映射关系改名,应先检查是否有重名、目标文件是否已存在,以及是否会发生“新旧文件名互相占用”。复杂批量改名通常要先生成完整的改名清单,再分两步执行:先改为临时名称,再改成最终名称。

整理目录时建议遵循几个习惯:

  • 先复制一份样本目录进行试运行。
  • 限定处理范围,例如只处理 .pdf 或 .xlsx 文件。
  • 把原始文件、处理中间文件和输出文件放在不同目录。
  • 对每个处理结果记录文件名、状态和错误原因。

批量合并和清理 Excel

如果需要按列筛选、汇总、连接多个工作簿,pandas 更方便;如果需要保留或修改单元格样式、批注、合并单元格等,则通常用 openpyxl。两者的 Excel 读写能力和适用格式有差别,可按任务选择,pandas 的 Excel 支持说明见官方文档。

假设每个工作簿都有“日期、部门、金额”三列,下面的程序读取指定目录下的 .xlsx 文件,合并后清理空行和金额格式,并输出汇总结果:

from pathlib import Path
import pandas as pd

source_dir = Path("输入表格")
output_dir = Path("输出")
output_dir.mkdir(exist_ok=True)

frames = []

for file_path in source_dir.glob("*.xlsx"):
    if file_path.name.startswith("~$"):
        continue

try:
        df = pd.read_excel(file_path, sheet_name="明细")
        df["来源文件"] = file_path.name
        frames.append(df)
    except Exception as exc:
        print(f"读取失败:{file_path.name},原因:{exc}")

if not frames:
    raise SystemExit("没有读取到有效工作簿")

all_data = pd.concat(frames, ignore_index=True)

**统一列名两侧空格,避免“金额 ”与“金额”被当成两列**
all_data.columns = all_data.columns.astype(str).str.strip

required = {"日期", "部门", "金额"}
missing = required - set(all_data.columns)
if missing:
    raise ValueError(f"缺少必要列:{sorted(missing)}")

all_data = all_data.dropna(subset=["部门", "金额"])
all_data["日期"] = pd.to_datetime(all_data["日期"], errors="coerce")
all_data["金额"] = pd.to_numeric(all_data["金额"], errors="coerce")
all_data = all_data.dropna(subset=["日期", "金额"])

summary = (
    all_data.groupby("部门", as_index=False)["金额"]
    .sum
    .sort_values("金额", ascending=False)
)

with pd.ExcelWriter(output_dir / "合并结果.xlsx") as writer:
    all_data.to_excel(writer, sheet_name="明细", index=False)
    summary.to_excel(writer, sheet_name="部门汇总", index=False)

真实工作表往往存在表头行数不一致、列名有别名、日期格式混杂、金额中带货币符号等情况。正式处理前最好统一字段名,并把不符合规则的行单独输出,供人工复核,而不是悄悄丢弃。

如果要编辑已有工作簿的单元格或样式,可以使用 openpyxl:

from openpyxl import load_workbook

workbook = load_workbook("输入.xlsx")
sheet = workbook["Sheet1"]

sheet["D1"] = "处理状态"
sheet["D2"] = "已处理"

workbook.save("输出.xlsx")

要注意,openpyxl 不会像 Excel 一样计算公式。以 data_only=True 打开时读取的是文件中上次由电子表格软件保存的公式结果缓存;如果缓存不存在或过期,读到的值可能为空或旧值。另有一些工作簿对象可能无法被完整保留,修改重要文件前应先备份,并对输出文件做抽查。相关行为和限制可见import csv from pathlib import Path csv_path = Path("名单.csv") with csv_path.open("r", encoding="utf-8-sig", newline="") as file: reader = csv.DictReader(file) for row in reader: print(row)

utf-8-sig 可以兼容带 UTF-8 签名的文件。有些由办公软件导出的中文 CSV 使用本地编码;如果打开后乱码,应先确认文件实际编码,再使用相应编码读取,不要反复尝试后就把乱码数据当作有效内容。

写 CSV 时也要明确换行和编码:

import csv

rows = [
    {"姓名": "林青", "部门": "财务"}
    {"姓名": "周宁", "部门": "采购"}
]

with open("名单输出.csv", "w", encoding="utf-8-sig", newline="") as file:
    writer = csv.DictWriter(file, fieldnames=["姓名", "部门"])
    writer.writeheader
    writer.writerows(rows)

如果 CSV 会被 Excel 打开,包含 =, +, -, @ 等开头的用户输入可能被识别为公式。对于来自外部的文本字段,应评估是否需要将其作为纯文本处理,尤其是将数据提供给他人打开时。

用模板生成 Word 文档

固定格式的通知、确认单、汇报材料等,可以用 Word 模板加数据生成。python-docx 支持创建和修改 .docx 文档,可添加段落、表格和标题样式;其基本用法见from docx import Document records = [ {"姓名": "林青", "部门": "财务", "事项": "费用报销"} {"姓名": "周宁", "部门": "采购", "事项": "供应商对账"} ] for record in records: doc = Document doc.add_heading("事项办理通知", level=1) doc.add_paragraph(f"姓名:{record['姓名']}") doc.add_paragraph(f"部门:{record['部门']}") doc.add_paragraph(f"办理事项:{record['事项']}") doc.add_paragraph("请按内部流程办理。") output_path = f"通知_{record['姓名']}.docx" doc.save(output_path)

如果文档要求统一字体、页眉页脚、页边距或公司标识,建议先在 Word 中制作好模板,再让程序填入内容。逐个生成文档后要检查长文本换行、表格分页、中文字体和文件命名;程序能写入内容,不代表最终版式一定符合使用要求。

网页自动化要先判断是否真的需要浏览器

能通过正式 API 或直接下载的文件,通常优先用接口或文件处理。只有需要登录、点击页面控件、处理前端动态加载内容时,才考虑浏览器自动化。自动化访问应遵守目标网站的使用规则和访问频率限制,不要绕过权限验证或访问无权处理的数据。

Playwright 提供 Python 同步和异步接口,并可驱动 Chromium、Firefox、WebKit;安装 Python 包后还要安装所需浏览器,细节见python -m pip install playwright python -m playwright install chromium

一个只访问公开页面并读取标题的简单例子:

from playwright.sync_api import sync_playwright

with sync_playwright as playwright:
    browser = playwright.chromium.launch(headless=True)
    page = browser.new_page
    page.goto(" wait_until="domcontentloaded")
    print(page.title)
    browser.close

处理需要登录的内部系统时,不要把密码直接写入代码或提交到版本库。应使用受控的凭据存储或环境变量,并限制账号权限。网页结构、按钮文本和登录方式可能变化,因此程序要能识别失败状态,并记录页面地址、任务编号和错误信息;不要在操作失败时继续提交或重复付款、审批等有实际影响的操作。

自动发送邮件时的边界

邮件发送可以通过企业邮件系统提供的 API 或受支持的 SMTP 服务完成。不同组织的身份验证方式、服务器配置和安全要求可能不同,应使用管理员提供的方式;不要把账号密码或访问令牌写在脚本中。

更稳妥的实施顺序是:

  1. 先生成邮件草稿或待发清单。
  2. 检查收件人、附件路径、主题和正文。
  3. 用测试邮箱验证格式和附件。
  4. 小批量发送并记录每封邮件的状态。
  5. 确认流程稳定后,再考虑自动定时发送。

涉及工资、客户资料、合同或个人信息时,发送前应确认收件人名单和附件内容,避免程序按错误的行匹配错发。

让脚本可以重复运行和排查问题

办公脚本常常要定期运行。可靠的脚本需要有明确的输入输出、错误记录和重复运行策略。

  • 保留原始数据。 原文件只读处理,输出写到新目录;不要在未备份的情况下覆盖原始工作簿。
  • 记录处理日志。 记录开始时间、输入文件数、成功数、失败文件和异常原因。
  • 允许重复运行。 输出文件使用清晰的日期或批次编号;运行前判断目标是否已存在,避免重复生成或重复提交。
  • 检查结果。 对比输入与输出行数、关键字段总计、空值数和重复记录数。
  • 拆分步骤。 将读取、清洗、计算、写出拆成函数,异常时更容易定位问题。
  • 先试运行。 用少量真实样本检查边界情况,再处理整批文件。

如果脚本要定时运行,可使用操作系统提供的任务计划功能。Windows 可以用“任务计划程序”,macOS 和 Linux 可使用系统的调度服务。配置时要指定脚本的完整路径、虚拟环境中的 Python 路径、工作目录和日志位置;定时任务运行时的环境变量和当前目录通常与手动打开终端时不同。

按任务逐步扩展

初学者不必一开始就做一个覆盖所有办公环节的大程序。可以从一个小流程入手:先稳定读取文件,再清理字段,再生成输出,最后加入日志和定时运行。每一步都保留可核对的中间结果,遇到异常时就能知道问题出现在哪个环节。

一个实用的自动化办公脚本,不只是“能跑通一次”,还应能处理空文件、缺失列、重复文件、权限不足和格式变化,并能让使用者看懂哪些记录处理成功、哪些需要人工复核。

  • 发表于 1 天前
  • 阅读 ( 25 )

你可能感兴趣的文章

相关问题

企鹅散步
企鹅散步

2 篇文章

作家榜 »

  1. 行者无疆 3 文章
  2. 极客少年 2 文章
  3. 晴空朗朗 2 文章
  4. 企鹅散步 2 文章
  5. 终觉遗憾 2 文章
  6. 云深不知处 2 文章
  7. 森林小鹿 1 文章
  8. 千山暮雪 1 文章