《Python实战进阶》No22 Python自动化办公实战:Excel/Word/PDF文件处理全攻略

No22 Python自动化办公实战:Excel/Word/PDF文件处理全攻略


摘要

本文将带你掌握Python在办公自动化领域的三大核心场景:Excel数据处理、Word文档生成与PDF文件操作。通过实战案例,你将学会如何用openpyxl、pandas、python-docx、PyPDF2等工具高效完成批量报表生成、动态文档创建和PDF合并水印添加,显著提升工作效率。


环境准备

运行环境

  • Python版本:3.8+

  • 依赖库版本 :

    bash 复制代码
    pandas==2.0.3
    openpyxl==3.1.2
    python-docx==1.1.0
    PyPDF2==3.0.1
    reportlab==4.0.4

安装命令

bash 复制代码
pip install pandas openpyxl python-docx PyPDF2 reportlab

核心知识点与实战案例

1. Excel文件处理:批量生成销售报表

场景需求

将多个部门的销售数据(CSV格式)合并到Excel报表,并添加数据透视表和图表。

代码实现
python 复制代码
import pandas as pd
import random

# === 生成随机销售数据 ===
departments = ["销售部", "市场部", "技术部", "客服部"]
quarters = ["Q1", "Q2", "Q3", "Q4"]

data = {
    "部门": [random.choice(departments) for _ in range(100)],
    "季度": [random.choice(quarters) for _ in range(100)],
    "销售额": [random.randint(5000, 50000) for _ in range(100)]
}

df = pd.DataFrame(data)
df.to_csv("sales_data.csv", index=False, encoding='utf-8-sig')
print("测试数据已生成:sales_data.csv")

# 读取CSV数据
sales_data = pd.read_csv("sales_data.csv")

# 创建Excel文件并保存
with pd.ExcelWriter("sales_report.xlsx", engine='openpyxl') as writer:
    sales_data.to_excel(writer, sheet_name='原始数据', index=False)
    
    # 生成数据透视表
    pivot_table = pd.pivot_table(
        sales_data,
        values='销售额',
        index='部门',
        columns='季度',
        aggfunc='sum'
    )
    pivot_table.to_excel(writer, sheet_name='数据透视表')

print("Excel报表生成成功!路径:sales_report.xlsx")
输入输出示例
  • 输入文件 :sales_data.csv(包含部门、季度、销售额字段)
  • 输出文件:生成包含原始数据和透视表的Excel文件
bash 复制代码
测试数据已生成:sales_data.csv
Excel报表生成成功!路径:sales_report.xlsx

2. Word文档处理:自动生成带图表的合同

场景需求

根据模板自动生成包含客户名称、金额和柱状图的销售合同。

代码实现
python 复制代码
from docx import Document
from docx.shared import Pt, Inches
import matplotlib.pyplot as plt
import os

# === 生成合同模板 ===
def create_contract_template():
    doc = Document()
    doc.add_heading("销售合同", 0)
    doc.add_paragraph("合同编号:_________", style='List Bullet')
    doc.add_paragraph("签订日期:_________", style='List Bullet')
    
    # 添加表格条款
    table = doc.add_table(rows=3, cols=2)
    hdr_cells = table.rows[0].cells
    hdr_cells[0].text = '条款'
    hdr_cells[1].text = '内容'
    table.style = 'Table Grid'
    
    doc.save("contract_template.docx")
    print("合同模板已生成:contract_template.docx")

# 检查模板是否存在,不存在则创建
if not os.path.exists("contract_template.docx"):
    create_contract_template()

# === 原有代码扩展 ===
# 创建图表
plt.bar(['Q1', 'Q2', 'Q3'], [150, 230, 180])
plt.title("季度销售额(万元)")
plt.savefig("sales_chart.png")

# 填充Word文档
doc = Document("contract_template.docx")
doc.add_paragraph(f"客户名称:ABC科技有限公司", style='List Bullet')
doc.add_paragraph(f"合同金额:¥500,000", style='List Bullet')
doc.add_picture("sales_chart.png", width=Inches(5))
doc.save("generated_contract.docx")

print("合同生成成功!路径:generated_contract.docx")
输入输出示例
  • 输入模板 :contract_template.docx(含固定条款)
  • 输出文件:动态插入文本和图表的完整合同
bash 复制代码
合同模板已生成:contract_template.docx

3. PDF处理:合并文件并添加水印

场景需求

合并多个部门报告PDF,并统一添加"机密"水印。

代码实现
python 复制代码
from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
import os

# 生成测试PDF ===
def create_sample_pdf(filename, content):
    c = canvas.Canvas(filename, pagesize=letter)
    text = c.beginText(40, 750)
    text.setFont("Courier", 12)
    for line in content.split('\n'):
        text.textLine(line)
    c.drawText(text)
    c.save()

# 生成测试PDF文件
if not os.path.exists("report1.pdf"):
    create_sample_pdf("report1.pdf", "第一季度报告\n\n销售额:¥200,000\n完成率:120%")

if not os.path.exists("report2.pdf"):
    create_sample_pdf("report2.pdf", "第二季度报告\n\n销售额:¥250,000\n完成率:135%")
print("测试PDF已生成:report1.pdf & report2.pdf")

# === 原有代码扩展 ===
# 生成水印PDF
c = canvas.Canvas("watermark.pdf", pagesize=letter)
c.setFont("Courier-Bold", 60)
c.setFillGray(0.3, 0.3)
c.rotate(45)
c.drawString(300, 100, "CONFIDENTIAL")
c.save()

# 合并并添加水印
writer = PdfWriter()
files = ["report1.pdf", "report2.pdf"]

for file in files:
    reader = PdfReader(file)
    for page in reader.pages:
        # 合并水印
        watermark = PdfReader("watermark.pdf").pages[0]
        page.merge_page(watermark)
        writer.add_page(page)

with open("merged_report.pdf", "wb") as out:
    writer.write(out)

print("PDF合并及水印添加完成!路径:merged_report.pdf")
输入输出示例
  • 输入文件:多个部门PDF报告
  • 输出文件:带水印的合并PDF
bash 复制代码
测试PDF已生成:report1.pdf & report2.pdf
PDF合并及水印添加完成!路径:merged_report.pdf

扩展思考

  1. 企业级自动化流水线

    将上述脚本整合为定时任务(如Windows任务计划程序或Linux Cron),结合邮件发送模块(smtplib),实现日报/周报自动推送。

  2. 跨格式数据互操作

    • 使用pandas将Excel数据导出为JSON:df.to_json('data.json')

    • 通过python-docx读取Word表格到DataFrame:

      python 复制代码
      from docx.api import Document
      doc = Document("report.docx")
      table = doc.tables[0]
      data = [[cell.text for cell in row.cells] for row in table.rows]

总结

通过本文的实战案例,你已掌握:

  1. 使用pandas和openpyxl处理Excel数据
  2. 通过python-docx动态生成Word文档
  3. 利用PyPDF2和reportlab操作PDF文件

下一步可尝试将这些技术组合应用到实际工作中,例如:

  • 自动化财务对账流程
  • 批量生成员工考核报告
  • 构建文档版本控制系统

立即动手改造你的工作流,让Python成为你的"数字员工"!

相关推荐
进击的明明3 小时前
当AI开始“边想边干”:深入聊聊ReAct,以及如何用Python手搓一个简单Agent
python·面试·agent
全栈弄潮儿4 小时前
Python实战第8期:函数
后端·python·编程语言
卷无止境6 小时前
暗流与破局:AI时代的代码安全审查工具全景指南
后端·python
卷无止境8 小时前
一人公司的全栈选型指南:让 AI Agent 写得快,也让生意跑得稳
后端·python
众壹新能源科技10 小时前
逆变器自带无功不够用,加装5MVar SVG后功率因数从0.85回到0.99
运维·人工智能·自动化
滴啦嘟啦哒10 小时前
【具身笔记】【π0.5 微调与仿真】五、在MuJoCo中实现可视化仿真
笔记·python·vla·具身
全栈练习生11 小时前
AI安全与红队测试
python·ai
费曼学习法11 小时前
把「发送成功」当「送达」?我排查 IM 长消息被静默吞掉的完整过程
python·ai编程·自动化运维
鸽鸽程序猿11 小时前
【项目】【在线判题系统】b端题目增删改
开发语言·python
NetX行者11 小时前
Python 工程化入门:从脚本到规范的 Python 项目结构
网络·python