【Python办公自动化】——Excel、Word、PDF操作大全(2026版)

目录

    • [Python 办公自动化完全指南:Excel、PDF 与 Word](#Python 办公自动化完全指南:Excel、PDF 与 Word)
    • [章节一:Python 使用 openpyxl 操作 Excel](#章节一:Python 使用 openpyxl 操作 Excel)
    • [章节二:Python 使用 PyPDF2 和 pdfplumber 操作 PDF](#章节二:Python 使用 PyPDF2 和 pdfplumber 操作 PDF)
      • [1、PyPDF2 和 pdfplumber 库介绍](#1、PyPDF2 和 pdfplumber 库介绍)
      • [2、Python 提取 PDF 文字内容](#2、Python 提取 PDF 文字内容)
        • [1)利用 pdfplumber 提取文字](#1)利用 pdfplumber 提取文字)
        • [2)利用 pdfplumber 提取表格并写入 Excel](#2)利用 pdfplumber 提取表格并写入 Excel)
      • [3、PDF 合并及页面的排序和旋转](#3、PDF 合并及页面的排序和旋转)
        • [1)分割及合并 PDF](#1)分割及合并 PDF)
        • [2)旋转及排序 PDF](#2)旋转及排序 PDF)
      • [4、PDF 批量加水印及加密、解密](#4、PDF 批量加水印及加密、解密)
    • [章节三:Python 使用 python-docx 操作 Word](#章节三:Python 使用 python-docx 操作 Word)
      • [1、python-docx 库介绍](#1、python-docx 库介绍)
      • [2、Python 读取 Word 文档内容](#2、Python 读取 Word 文档内容)
        • [1)Word 文档结构介绍](#1)Word 文档结构介绍)
        • [2)python-docx 提取文字和文字块儿](#2)python-docx 提取文字和文字块儿)
        • [3)利用 Python 向 新建Word 文档写入内容](#3)利用 Python 向 新建Word 文档写入内容)
      • [3、利用 Python 调整 Word 文档样式](#3、利用 Python 调整 Word 文档样式)

专栏导读

🌸 欢迎来到Python办公自动化专栏---Python处理办公问题,解放您的双手
🏳️‍🌈 个人博客主页:请点击------> 个人的博客主页 求收藏
🏳️‍🌈 Github主页:请点击------> Github主页 求Star⭐
🏳️‍🌈 知乎主页:请点击------> 知乎主页 求关注
🏳️‍🌈 CSDN博客主页:请点击------> CSDN的博客主页 求关注
👍 该系列文章专栏:请点击------>Python办公自动化专栏 求订阅
🕷 此外还有爬虫专栏:请点击------>Python爬虫基础专栏 求订阅
📕 此外还有python基础专栏:请点击------>Python基础学习专栏 求订阅
文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
❤️ 欢迎各位佬关注! ❤️

Python 办公自动化完全指南:Excel、PDF 与 Word

在日常工作中,处理 Excel 表格、PDF 文档和 Word 文档是必不可少的任务。Python 提供了强大的第三方库来帮助我们自动化这些重复性工作,极大提高效率。本文将详细介绍如何使用 openpyxl 操作 Excel,使用 PyPDF2pdfplumber 操作 PDF,以及使用 python-docx 操作 Word。


章节一:Python 使用 openpyxl 操作 Excel

openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。

1、openpyxl 库介绍

  • 安装

    bash 复制代码
    pip install openpyxl
  • 核心概念

    • Workbook: 工作簿(整个 Excel 文件)
    • Worksheet: 工作表(Sheet)
    • Cell: 单元格

2、Python 怎么打开及读取表格内容?

1)Excel 表格术语
  • Workbook: Excel 文件对象
  • Sheet: 表单
  • Row: 行(从 1 开始)
  • Column: 列(从 A 开始或从 1 开始)
  • Cell: 单元格
2)打开 Excel 表格并获取表格名称
python 复制代码
from openpyxl import load_workbook

# 加载工作簿
wb = load_workbook('example.xlsx')

# 获取所有 sheet 名称
print(wb.sheetnames) 
# 输出: ['Sheet1', 'Sheet2']
3)通过 sheet 名称获取表格
python 复制代码
# 获取特定的 sheet
ws = wb['Sheet1']
# 或者获取当前活跃的 sheet
ws_active = wb.active
print(ws.title)
4)获取表格的尺寸大小
python 复制代码
# 获取表格的最大行和最大列
print(f"最大行: {ws.max_row}")
print(f"最大列: {ws.max_column}")
# output: 尺寸: A1:C10
print(f"尺寸: {ws.dimensions}") 
5)获取表格内某个格子的数据

① sheet["A1"] 方式

python 复制代码
cell_value = ws['A1'].value
print(cell_value)

② sheet.cell(row=, column=) 方式

python 复制代码
# 注意:row 和 column 都是从 1 开始
cell_value = ws.cell(row=1, column=1).value
print(cell_value)
6)获取某个格子的行数、列数、坐标
python 复制代码
c = ws['B2']
print(f"行: {c.row}, 列: {c.column}, 坐标: {c.coordinate}")
7)获取一系列格子

① sheet[] 方式

python 复制代码
# 获取 A 列
col_a = ws['A']
# 获取 A 到 C 列
col_range = ws['A:C']
# 获取第 1 行
row_1 = ws[1]
# 获取 A1 到 C3 的区域
cell_range = ws['A1:C3']

for row in cell_range:
    for cell in row:
        print(cell.value)

② .iter_rows() 方式

按行迭代,返回生成器,效率更高。

python 复制代码
for row in ws.iter_rows(min_row=1, max_row=2, min_col=1, max_col=3):
    for cell in row:
        print(cell.value)

③ sheet.rows

返回所有行的生成器。

python 复制代码
for row in ws.rows:
    print(row) # tuple of cells

3、Python 如何向 Excel 中写入某些内容?

1)修改表格中的内容

① 向某个格子中写入内容并保存

python 复制代码
ws['A1'] = 'Hello World'
ws.cell(row=1, column=2, value='Python')
# 保存文件(如果是修改现有文件,建议另存为新文件名以防数据丢失)
wb.save('modified_example.xlsx')

② .append():向表格中插入行数据

非常常用的方法,用于在表格末尾追加一行数据。

python 复制代码
# 添加一行数据
ws.append(['Name', 'Age', 'Gender'])
ws.append(['Alice', 25, 'Female'])

③ 在 Python 中使用 Excel 函数公式

python 复制代码
ws['C1'] = 10
ws['C2'] = 20
ws['C3'] = '=SUM(C1:C2)' # 写入公式

④ .insert_cols() 和 .insert_rows():插入空行和空列

python 复制代码
ws.insert_rows(idx=2, amount=1) # 在第2行前插入1行
ws.insert_cols(idx=1, amount=2) # 在第1列前插入2列

⑤ .delete_rows() 和 .delete_cols():删除行和列

python 复制代码
ws.delete_rows(idx=2, amount=1) # 删除第2行
ws.delete_cols(idx=1, amount=1) # 删除第1列

⑥ .move_range():移动格子

python 复制代码
# 将 A1:C3 区域向下移动 2 行,向右移动 1 列
ws.move_range("A1:C3", rows=2, cols=1)

⑦ .create_sheet():创建新的 sheet 表格

python 复制代码
ws_new = wb.create_sheet("NewSheet", index=0) # index=0 插入到最前面

⑧ .remove():删除某个 sheet 表

python 复制代码
del wb['NewSheet']
# 或者
# wb.remove(wb['NewSheet'])

⑨ .copy_worksheet():复制一个 sheet 表

python 复制代码
source = wb.active
target = wb.copy_worksheet(source)
target.title = "Copy of Active"

⑩ sheet.title:修改 sheet 表的名称

python 复制代码
ws.title = "My Renamed Sheet"

⑪ 创建新的 Excel 表格文件

python 复制代码
from openpyxl import Workbook
wb_new = Workbook()
ws_new = wb_new.active
ws_new.title = "Data"
wb_new.save("new_file.xlsx")
wb.save('modified_example.xlsx')

⑫ sheet.freeze_panes:冻结窗口

python 复制代码
ws.freeze_panes = 'A2' # 冻结第一行
# ws.freeze_panes = 'B1' # 冻结第一列

⑬ sheet.auto_filter.ref:给表格添加"筛选器"

python 复制代码
from openpyxl import load_workbook
wb = load_workbook('example.xlsx')
ws = wb.active
ws.auto_filter.ref = ws.dimensions # 给所有有数据的区域添加筛选
# 或者指定区域
ws.auto_filter.ref = "A1:C10"
wb.save('modified_example.xlsx')

4、批量调整字体和样式

需要导入 openpyxl.styles 模块。

1)修改字体样式
python 复制代码
from openpyxl.styles import Font
ws = wb.active
# 粗体,斜体,红色,字号20
font_style = Font(name='Arial', size=20, bold=True, italic=True, color='FF0000')
ws['A1'].font = font_style
wb.save('modified_example.xlsx')
2)获取表格中格子的字体样式
python 复制代码
current_font = ws['A1'].font
print(current_font.name, current_font.size)
3)设置对齐样式
python 复制代码
from openpyxl.styles import Alignment

# 水平居中,垂直居中,自动换行
align = Alignment(horizontal='center', vertical='center', wrap_text=True)
ws['A1'].alignment = align
wb.save('modified_example.xlsx')
4)设置边框样式
python 复制代码
from openpyxl import load_workbook
from openpyxl.styles import Border, Side

wb = load_workbook('example.xlsx')
ws = wb.active

# 使用双线边框,视觉上看起来更粗
double_border = Side(border_style="double", color="FF0000")
border = Border(left=double_border, 
                right=double_border, 
                top=double_border, 
                bottom=double_border)

ws['A1'].border = border
wb.save('modified_example.xlsx')

"thin" - 细边框
"medium" - 中等粗细
"thick" - 粗边框
"double" - 双线边框
"hair" - 极细边框
"dashed" - 虚线边框
"dotted" - 点线边框等
5)设置填充样式
python 复制代码
from openpyxl import load_workbook
from openpyxl.styles import PatternFill

# 加载工作簿
wb = load_workbook('example.xlsx')
ws = wb.active
# 黄色背景填充
fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
ws['A1'].fill = fill

# 保存修改
wb.save('modified_example.xlsx')
6)设置行高和列宽
python 复制代码
from openpyxl import load_workbook

# 加载工作簿
wb = load_workbook('example.xlsx')
ws = wb.active
ws.row_dimensions[1].height = 30 # 设置第1行高度
ws.column_dimensions['A'].width = 20 # 设置A列宽度
# 保存修改
wb.save('modified_example.xlsx')
7)合并单元格
python 复制代码
from openpyxl import load_workbook

# 加载工作簿
wb = load_workbook('example.xlsx')
ws = wb.active
ws.merge_cells('A1:B2')
# 或者
# ws.merge_cells(start_row=1, start_column=1, end_row=2, end_column=2)
# 取消合并
# ws.unmerge_cells('A1:B2')
# 保存修改
wb.save('modified_example.xlsx')

章节二:Python 使用 PyPDF2 和 pdfplumber 操作 PDF

1、PyPDF2 和 pdfplumber 库介绍

  • PyPDF2: 主要用于合并、拆分、旋转、加密 PDF 等页面级操作,提取文本能力较弱。

  • pdfplumber: 专注于提取 PDF 中的文本和表格,准确率较高。

  • 安装:

    bash 复制代码
    pip install PyPDF2 pdfplumber

2、Python 提取 PDF 文字内容

1)利用 pdfplumber 提取文字
python 复制代码
import pdfplumber

with pdfplumber.open("荷塘月色.pdf") as pdf:
    for page in pdf.pages:
        text = page.extract_text()
        print(f"--- Page {page.page_number} ---")
        print(text)
2)利用 pdfplumber 提取表格并写入 Excel

Python如何批量提取PDF中的表格工具下载------请点击我

python 复制代码
import pdfplumber
import pandas as pd

with pdfplumber.open("example_table.pdf") as pdf:
    page = pdf.pages[0]  # 假设表格在第一页
    table = page.extract_table()

    if table:
        df = pd.DataFrame(table[1:], columns=table[0])  # 假设第一行是表头
        df.to_excel("output_table.xlsx", index=False)

3、PDF 合并及页面的排序和旋转

使用 PyPDF2 进行操作。

1)分割及合并 PDF

① 合并 PDF

python 复制代码
from PyPDF2 import PdfMerger

merger = PdfMerger()
pdfs = ['example_table1.pdf', 'example_table2.pdf']

for pdf in pdfs:
    merger.append(pdf)

merger.write("merged_result.pdf")
merger.close()

② 拆分 PDF

python 复制代码
from PyPDF2 import PdfReader, PdfWriter

reader = PdfReader("merged_result.pdf")

for i, page in enumerate(reader.pages):
    writer = PdfWriter()
    writer.add_page(page)
    with open(f"page_{i+1}.pdf", "wb") as f:
        writer.write(f)
2)旋转及排序 PDF

① 旋转 PDF

python 复制代码
from PyPDF2 import PdfReader, PdfWriter

reader = PdfReader("荷塘月色.pdf")
writer = PdfWriter()

page = reader.pages[0]
page.rotate(90) # 顺时针旋转90度
writer.add_page(page)

with open("rotated.pdf", "wb") as f:
    writer.write(f)

② 排序 PDF

可以通过调整 add_page 的顺序来实现。

python 复制代码
# 假设倒序保存
from PyPDF2 import PdfReader, PdfWriter

reader = PdfReader("荷塘月色.pdf")
writer = PdfWriter()
for page in reversed(reader.pages):
    writer.add_page(page)

with open("reversed.pdf", "wb") as f:
    writer.write(f)

4、PDF 批量加水印及加密、解密

【Python办公】Excel&PDF添加文字、图片水印

1)批量加水印

原理:将水印页面作为"印章"盖在每一页上。

python 复制代码
from PyPDF2 import PdfReader, PdfWriter

watermark = PdfReader("watermark.pdf").pages[0]
reader = PdfReader("content.pdf")
writer = PdfWriter()

for page in reader.pages:
    page.merge_page(watermark) # 合并页面
    writer.add_page(page)

with open("watermarked.pdf", "wb") as f:
    writer.write(f)
2)批量加密、解密

① 加密 PDF

python 复制代码
from PyPDF2 import PdfReader, PdfWriter

writer = PdfWriter()
reader = PdfReader("荷塘月色.pdf")

for page in reader.pages:
    writer.add_page(page)

writer.encrypt("password123") # 设置密码

with open("encrypted.pdf", "wb") as f:
    writer.write(f)

② 解密 PDF 并保存为未加密的 PDF

python 复制代码
from PyPDF2 import PdfReader, PdfWriter
reader = PdfReader("encrypted.pdf")

if reader.is_encrypted:
    reader.decrypt("password123")

writer = PdfWriter()
for page in reader.pages:
    writer.add_page(page)

with open("decrypted.pdf", "wb") as f:
    writer.write(f)

章节三:Python 使用 python-docx 操作 Word

1、python-docx 库介绍

  • 用途:用于创建和更新 .docx 文件。

  • 安装

    bash 复制代码
    pip install python-docx

2、Python 读取 Word 文档内容

1)Word 文档结构介绍
  • Document: 整个文档
  • Paragraph: 段落(回车符分隔)
  • Run: 文本块(具有相同样式的连续文本)
2)python-docx 提取文字和文字块儿

① python-docx 提取文字

python 复制代码
from docx import Document

doc = Document("example.docx")

full_text = []
for para in doc.paragraphs:
    full_text.append(para.text)

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

② python-docx 提取文字块儿

python 复制代码
from docx import Document

doc = Document("example.docx")

for para in doc.paragraphs:
    for run in para.runs:
        print(run.text) # 打印每个样式块的文本
3)利用 Python 向 新建Word 文档写入内容

① 添加段落

python 复制代码
from docx import Document

doc = Document()
p = doc.add_paragraph('这是一个新段落。')

doc.save('test_save.docx')

② 添加文字块儿

python 复制代码
from docx import Document

doc = Document()
p = doc.add_paragraph('这是一个新段落。')
run = p.add_run('这是加粗的文字。')
run.bold = True
p.add_run('这是普通的文字。')
doc.save('test_save.docx')

③ 添加一个分页

python 复制代码
from docx import Document

doc = Document()
p = doc.add_paragraph('这是一个新段落。')
run = p.add_run('这是加粗的文字。')
run.bold = True
p.add_run('这是普通的文字。')
doc.add_page_break()

doc.save('test_save.docx')

④ 添加图片

python 复制代码
from docx import Document
from docx.shared import Inches

doc = Document()
p = doc.add_paragraph('这是一个新段落。')
run = p.add_run('这是加粗的文字。')
run.bold = True
p.add_run('这是普通的文字。')
# doc.add_page_break()
doc.add_picture('img.png', width=Inches(1.25)) # 需要 from docx.shared import Inches
doc.save('test_save.docx')

⑤ 添加表格

python 复制代码
from docx import Document

doc = Document()
table = doc.add_table(rows=2, cols=2)
table.cell(0, 0).text = "A1"
table.cell(0, 1).text = "B1"
doc.save('test_save.docx')

⑥ 提取 Word 表格,并保存在 Excel 中

python 复制代码
import pandas as pd
from docx import Document

doc = Document("test_save.docx")
tables_data = []

for table in doc.tables:
    for row in table.rows:
        row_data = [cell.text for cell in row.cells]
        tables_data.append(row_data)

df = pd.DataFrame(tables_data)
df.to_excel("word_tables.xlsx", index=False)

3、利用 Python 调整 Word 文档样式

1)修改文字字体样式
python 复制代码
from docx import Document
from docx.shared import Pt, RGBColor
from docx.oxml.ns import qn


doc = Document()
p = doc.add_paragraph()
run = p.add_run('自定义样式文字')
run.font.size = Pt(14)
run.font.color.rgb = RGBColor(0x42, 0x24, 0xE9)
# 设置中文字体需要特殊处理
run.font.name = '微软雅黑'
run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')

doc.save('test_save.docx')
2)修改段落样式

① 对齐样式

python 复制代码
from docx import Document
from docx.shared import Pt, RGBColor
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH


doc = Document()
p = doc.add_paragraph()
run = p.add_run('自定义样式文字')
run.font.size = Pt(14)
run.font.color.rgb = RGBColor(0x42, 0x24, 0xE9)
# 设置中文字体需要特殊处理
run.font.name = '微软雅黑'
run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
p.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中

doc.save('test_save.docx')

② 行间距调整

python 复制代码
from docx import Document
from docx.shared import Pt, RGBColor
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH


doc = Document()
p = doc.add_paragraph()
run = p.add_run('自定义样式文字测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试')
run.font.size = Pt(14)
run.font.color.rgb = RGBColor(0x42, 0x24, 0xE9)
# 设置中文字体需要特殊处理
run.font.name = '微软雅黑'
run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
p.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中
p.paragraph_format.line_spacing = 1.5 # 1.5倍行距

doc.save('test_save.docx')

③ 段前与段后间距

python 复制代码
from docx import Document
from docx.shared import Pt, RGBColor
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH


doc = Document()
p = doc.add_paragraph()
run = p.add_run('自定义样式文字测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试')
run.font.size = Pt(14)
run.font.color.rgb = RGBColor(0x42, 0x24, 0xE9)
# 设置中文字体需要特殊处理
run.font.name = '微软雅黑'
run._element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
p.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中
p.paragraph_format.line_spacing = 1.5 # 1.5倍行距

p.paragraph_format.space_before = Pt(12) # 段前12磅
p.paragraph_format.space_after = Pt(12)  # 段后12磅
p = doc.add_paragraph()
run = p.add_run('自定义样式文字测试2测试2测试2测试2测试2测试2测试2测试2测试2测试2测试2测试2测试2测试2测试2测试2测试2测试2测试2测试2测试2')

doc.save('test_save.docx')

注意:以上代码示例需要配合相应的文件环境运行。使用前请确保已安装 openpyxl, pandas, PyPDF2, pdfplumber, python-docx 等库。

结尾

希望对初学者有帮助;致力于办公自动化的小小程序员一枚
希望能得到大家的【❤️一个免费关注❤️】感谢!
求个 🤞 关注 🤞 +❤️ 喜欢 ❤️ +👍 收藏 👍
此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏
此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏
此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏
相关推荐
Cherry的跨界思维9 天前
27、Python压缩备份安全指南:从zipfile到AES-256加密,生产级自动化备份全方案
人工智能·python·安全·自动化·办公自动化·python自动化·python办公自动化
Cherry的跨界思维9 天前
19、自动化处理双核心:Java规则引擎与Python Selenium实战全解析
java·开发语言·python·自动化·办公自动化·python办公自动化·python办公
百里图书3 个月前
Python自动化办公2.0全能实战:从Excel到BI大屏,从OCR到机器学习,一站式提升办公效率100倍
python·自动化·excel·python自动化办公·python办公自动化·张同乐·python自动化办公2.0
爱分享的飘哥5 个月前
第二十一 篇 PDF文档自动化:Python一键合并、分割、水印、提取与加密解密!你的PDF全能管家!
python·pdf·python操作pdf·pdf 加解密·pdf 分割和合并
明月与玄武1 年前
Python办公自动化之Excel
python办公自动化·办公自动化之excel
明月与玄武1 年前
Python办公自动化之Word
word·python办公自动化·python办公之word
长风清留扬1 年前
Python自动化:Python操作Excel的多种方式Pandas+openpyxl+xlrd
开发语言·python·数据分析·自动化·excel·pandas·python办公自动化
童小纯2 年前
Python办公自动化【PPT增加图片、PPT增加流程图PPT增加图表、PPT设置图表样式、PPT绘制其它图表】(七)-全面详解(学习总结---从入门到深化)
前端·python·办公自动化·python办公自动化
童小纯2 年前
Python办公自动化【Word设置文字样式、Word设置段落样式、Word生成通知书、Word读取内容】(五)-全面详解(学习总结---从入门到深化)
前端·python·html·python办公自动化