Python自动化操作Excel/Word/PDF的实战指南

 更新时间:2025年09月09日 09:09:19   作者:HappyAcmen  
在现代办公环境中,我们经常需要处理各种文档格式,如Excel表格、Word文档和PDF文件,下面我们就来看看如何使用Python自动化进行相关操作吧

在现代办公环境中,我们经常需要处理各种文档格式,如Excel表格、Word文档和PDF文件。手动处理这些文档不仅耗时,而且容易出错。Python提供了多个强大的库来实现文档处理的自动化,本文将重点介绍如何使用openpyxl和docx库来操作Excel和Word文档,并简要介绍PDF处理的方法。

一、Python操作Excel:openpyxl库

1. 安装openpyxl

pip install openpyxl

2. 基本操作

创建工作簿和工作表

from openpyxl import Workbook

# 创建工作簿
wb = Workbook()

# 获取默认激活的工作表
ws = wb.active

# 设置工作表标题
ws.title = "员工数据"

# 创建新工作表
ws1 = wb.create_sheet("部门统计")  # 插入在最后
ws2 = wb.create_sheet("薪资汇总", 0)  # 插入在第一个位置

# 保存工作簿
wb.save("公司数据.xlsx")

读取和写入数据

from openpyxl import load_workbook

# 加载现有工作簿
wb = load_workbook('公司数据.xlsx')

# 选择工作表
ws = wb['员工数据']

# 写入数据
ws['A1'] = '员工ID'
ws['B1'] = '姓名'
ws['C1'] = '部门'
ws['D1'] = '薪资'

# 批量写入数据
data = [
    [1, '张三', '技术部', 15000],
    [2, '李四', '市场部', 12000],
    [3, '王五', '财务部', 13000],
    [4, '赵六', '技术部', 16000]
]

for row in data:
    ws.append(row)

# 读取数据
for row in ws.iter_rows(min_row=2, max_row=5, values_only=True):
    print(f"员工{row[1]} 在{row[2]}部门,薪资为{row[3]}")

# 保存更改
wb.save('公司数据.xlsx')

高级功能:公式、样式和图表

from openpyxl.styles import Font, Alignment, PatternFill
from openpyxl.chart import BarChart, Reference

# 设置标题行样式
bold_font = Font(bold=True, size=12)
fill = PatternFill(fill_type="solid", fgColor="DDDDDD")
align_center = Alignment(horizontal="center")

for cell in ws[1]:
    cell.font = bold_font
    cell.fill = fill
    cell.alignment = align_center

# 添加公式计算平均薪资
ws['E1'] = '平均薪资'
ws['E2'] = '=AVERAGE(D2:D5)'

# 创建图表
chart = BarChart()
chart.title = "部门薪资对比"
chart.x_axis.title = "员工"
chart.y_axis.title = "薪资"

data = Reference(ws, min_col=4, min_row=1, max_row=5)
categories = Reference(ws, min_col=2, min_row=2, max_row=5)
chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)

ws.add_chart(chart, "G2")

wb.save('公司数据_增强.xlsx')

二、Python操作Word:python-docx库

1. 安装python-docx

pip install python-docx

2. 基本操作

创建文档和添加内容

from docx import Document
from docx.shared import Inches, Pt
from docx.enum.text import WD_ALIGN_PARAGRAPH

# 创建新文档
doc = Document()

# 添加标题
doc.add_heading('公司季度报告', 0)

# 添加段落
p = doc.add_paragraph('本季度公司业绩表现良好,各部门均完成了既定目标。')
p.add_run('特别是技术部门').bold = True
p.add_run(',超额完成了项目开发任务。')

# 添加二级标题
doc.add_heading('部门业绩详情', level=2)

# 添加表格
table = doc.add_table(rows=1, cols=3)
table.style = 'Table Grid'

# 设置表头
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '部门'
hdr_cells[1].text = '目标完成率'
hdr_cells[2].text = '同比增长'

# 添加数据
data = [
    ['技术部', '120%', '15%'],
    ['市场部', '95%', '8%'],
    ['财务部', '100%', '5%']
]

for dept, rate, growth in data:
    row_cells = table.add_row().cells
    row_cells[0].text = dept
    row_cells[1].text = rate
    row_cells[2].text = growth

# 添加分页符
doc.add_page_break()

# 添加另一个章节
doc.add_heading('下一步计划', level=2)
doc.add_paragraph(
    '1. 扩大技术团队规模', style='List Number'
)
doc.add_paragraph(
    '2. 开拓新市场', style='List Number'
)
doc.add_paragraph(
    '3. 优化财务管理流程', style='List Number'
)

# 保存文档
doc.save('季度报告.docx')

读取和修改现有文档

from docx import Document

# 打开现有文档
doc = Document('季度报告.docx')

# 读取内容
full_text = []
for paragraph in doc.paragraphs:
    full_text.append(paragraph.text)

print('\n'.join(full_text))

# 修改内容
for paragraph in doc.paragraphs:
    if '技术部门' in paragraph.text:
        paragraph.text = paragraph.text.replace('技术部门', '研发中心')

# 保存修改后的文档
doc.save('季度报告_修改版.docx')

三、Python操作PDF

1. 常用PDF处理库

  • PyPDF2:用于拆分、合并、裁剪和转换PDF页面
  • pdfminer:用于提取PDF中的文本和元数据
  • ReportLab:用于创建PDF文档
  • pdfkit:将HTML转换为PDF(基于wkhtmltopdf)

2. 基本PDF操作示例

合并PDF文件

import PyPDF2

def merge_pdfs(paths, output):
    pdf_writer = PyPDF2.PdfWriter()
    
    for path in paths:
        pdf_reader = PyPDF2.PdfReader(path)
        for page in range(len(pdf_reader.pages)):
            pdf_writer.add_page(pdf_reader.pages[page])
    
    with open(output, 'wb') as out:
        pdf_writer.write(out)

# 使用示例
merge_pdfs(['file1.pdf', 'file2.pdf'], 'merged.pdf')

提取PDF文本

from pdfminer.high_level import extract_text

text = extract_text('document.pdf')
print(text)

四、实战案例:自动化生成报告

下面是一个综合案例,演示如何从Excel读取数据,然后生成Word报告和PDF报告。

from openpyxl import load_workbook
from docx import Document
import pdfkit

# 1. 从Excel读取数据
wb = load_workbook('公司数据.xlsx')
ws = wb.active

dept_data = {}
for row in ws.iter_rows(min_row=2, values_only=True):
    dept = row[2]
    salary = row[3]
    if dept not in dept_data:
        dept_data[dept] = {
            'count': 0,
            'total_salary': 0,
            'max_salary': 0
        }
    
    dept_data[dept]['count'] += 1
    dept_data[dept]['total_salary'] += salary
    if salary > dept_data[dept]['max_salary']:
        dept_data[dept]['max_salary'] = salary

# 计算平均薪资
for dept in dept_data:
    dept_data[dept]['avg_salary'] = dept_data[dept]['total_salary'] / dept_data[dept]['count']

# 2. 生成Word报告
doc = Document()
doc.add_heading('公司部门统计报告', 0)

# 添加摘要段落
doc.add_paragraph(
    f本报告基于员工数据统计分析,共涵盖{len(dept_data)}个部门。'
)

# 添加表格
table = doc.add_table(rows=1, cols=4)
table.style = 'Table Grid'

# 表头
hdr_cells = table.rows[0].cells
hdr_cells[0].text = '部门'
hdr_cells[1].text = '员工数'
hdr_cells[2].text = '平均薪资'
hdr_cells[3].text = '最高薪资'

# 表格数据
for dept, data in dept_data.items():
    row_cells = table.add_row().cells
    row_cells[0].text = dept
    row_cells[1].text = str(data['count'])
    row_cells[2].text = f"{data['avg_salary']:.2f}"
    row_cells[3].text = str(data['max_salary'])

doc.add_paragraph('\n报告生成时间:2023年11月1日')
doc.save('部门统计报告.docx')

# 3. 转换为PDF
# 需要先安装wkhtmltopdf并设置路径
# path_wkhtmltopdf = r'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
# config = pdfkit.configuration(wkhtmltopdf=path_wkhtmltopdf)
# pdfkit.from_file('部门统计报告.docx', '部门统计报告.pdf')  # 注意:这种方法需要docx能正确转换为HTML

print("报告生成完成!")

五、总结

本文介绍了使用Python操作Excel、Word和PDF文件的基本方法:

  • openpyxl 提供了强大的Excel操作功能,可以创建、读取、修改工作簿,支持公式、样式和图表
  • python-docx 使得Word文档的创建和修改变得简单,支持段落、表格、样式等元素
  • PDF处理可以使用多个库,根据需求选择合适的工具

通过这些工具,我们可以实现办公文档处理的自动化,大大提高工作效率和准确性。在实际应用中,可以根据具体需求组合使用这些库,构建复杂的文档处理流程。

以上就是Python自动化操作Excel/Word/PDF的实战指南的详细内容,更多关于Python自动化办公的资料请关注脚本之家其它相关文章!

相关文章

  • 使用Django和Postgres进行全文搜索的实例代码

    使用Django和Postgres进行全文搜索的实例代码

    这篇文章主要介绍了使用Django和Postgres进行全文搜索,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Python之求任意正整数的阶乘方式

    Python之求任意正整数的阶乘方式

    这篇文章主要介绍了Python之求任意正整数的阶乘方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python中的标签编码和独热编码示例详解

    Python中的标签编码和独热编码示例详解

    标签编码是一种用于将分类列转换为数值列的技术,以便它们可以通过仅采用数值数据的机器学习模型进行拟合,这篇文章主要介绍了Python中的标签编码和独热编码,需要的朋友可以参考下
    2023-07-07
  • 使用grappelli为django admin后台添加模板

    使用grappelli为django admin后台添加模板

    本文介绍了一款非常流行的Django模板系统--grappelli,以及如何给Django的admin后台添加模板,非常的实用,这里推荐给大家。
    2014-11-11
  • python中关于eval函数的使用及说明

    python中关于eval函数的使用及说明

    这篇文章主要介绍了python中关于eval函数的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • python模块常用用法实例详解

    python模块常用用法实例详解

    由于平时习惯,strftime比较常用,strptime和它是反操作。这篇文章主要介绍了python模块常用用法,需要的朋友可以参考下
    2019-10-10
  • Numpy中的repeat函数使用

    Numpy中的repeat函数使用

    Numpy是Python强大的数学计算库,和Scipy一起构建起Python科学计算生态,在本节下面我们重点介绍下repeat函数的用法,需要的朋友可以参考下
    2022-11-11
  • django admin后管定制-显示字段的实例

    django admin后管定制-显示字段的实例

    这篇文章主要介绍了django admin后管定制-显示字段的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python使用LRU缓存策略进行缓存的方法步骤

    Python使用LRU缓存策略进行缓存的方法步骤

    本文主要介绍了Python使用LRU缓存策略进行缓存的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 非常全面的Python常见基础面试题及答案

    非常全面的Python常见基础面试题及答案

    Python是目前编程领域最受欢迎的语言,Python可用于许多领域,Web应用程序开发,自动化,数学建模,大数据应用程序等等,这篇文章主要给大家介绍了关于Python常见基础面试题及答案的相关资料,需要的朋友可以参考下
    2021-09-09

最新评论