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

news/2025/3/18 15:47:43/

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


摘要

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


在这里插入图片描述

环境准备

运行环境

  • Python版本:3.8+
  • 依赖库版本
    pandas==2.0.3
    openpyxl==3.1.2
    python-docx==1.1.0
    PyPDF2==3.0.1
    reportlab==4.0.4
    

安装命令

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文件
测试数据已生成: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].cellshdr_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(含固定条款)
  • 输出文件:动态插入文本和图表的完整合同
合同模板已生成: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
测试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. 使用pandasopenpyxl处理Excel数据
  2. 通过python-docx动态生成Word文档
  3. 利用PyPDF2reportlab操作PDF文件

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

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

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


http://www.ppmy.cn/news/1580099.html

相关文章

Tauri + Vite + SvelteKit + TailwindCSS + DaisyUI 跨平台开发详细配置指南(Windows)

Tauri Vite SvelteKit TailwindCSS DaisyUI 跨平台开发详细配置指南(Windows) 本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议。转载请注明出处及本声明 原文链接:[你的文章链接] 🛠️ 环境准备 1. 安装核心工具…

发现一个GoVCL的问题

之前用govcl写了一个服务端的界面程序,用来控制服务的开启和关闭。 由于这个服务程序运行的时间比较长,经常是挂着在服务器上24小时不间断运行。 后来经过调试发现,govcl的界面按钮控件,在程序长时间运行后,会出现无法…

失败的面试经历(ʘ̥∧ʘ̥)

一.面向对象的三大特性 1.封装:将对象内部的属性私有化,外部对象不能够直接访问,但是可以提供一些可以使外部对象操作内部属性的方法。 2.继承:类与类之间会有一些相似之处,但也会有一些异处,使得他们与众…

不用 Tomcat?SpringBoot 项目用啥代替?

在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。 同时,SpringBoot也支持Undertow容器,我们可以很方便的用Undertow替换Tomcat,而Undertow的性能和内存使…

简述下npm,cnpm,yarn和pnpm的区别,以及跟在后面的-g,--save, --save-dev代表着什么

文章目录 前言一、npm,cnpm,yarn和pnpm的基本介绍和特点1.npm (Node Package Manager)2. Yarn3. cnpm (China npm)4. pnpm 二、简述npm和pnpm 的存储方式和依赖数1.存储方式2.依赖树 三、两者依赖树的差异导致结果的对比四、简单说说-g,--sav…

mariaDB中常见的DDL,DML,DQL语句

在 MariaDB 里,DDL(数据定义语言)、DML(数据操作语言)和 DQL(数据查询语言)是用于管理和操作数据库的重要工具,以下为你介绍它们常见的语句: DDL(数据定义语…

python局部变量和全局变量

文章目录 1.局部变量和全局变量2.局部变量2.1 局部变量的作用2.2 局部变量的生命周期 3. 全局变量3.1 函数不能直接修改全局变量的引用3.2 在函数内部修改全局变量的值3.3 全局变量定义的位置3.4 全局变量命名的建议 1.局部变量和全局变量 (1)局部变量 …

计算机网络-1-1计算机网络体系结构

第一章计算机网络体系结构 绪论 《计算机网络》学什么?——数据如何通过网络正确、可靠地从A传送到B 【考纲内容】 (一)计算机网络概述 计算机网络的概念、组成与功能;计算机网络的分类; 计算机网络的性能指标 (二)计算机网…