目录
-
- [Python 办公自动化完全指南:Excel、PDF 与 Word](#Python 办公自动化完全指南:Excel、PDF 与 Word)
- [章节一:Python 使用 openpyxl 操作 Excel](#章节一:Python 使用 openpyxl 操作 Excel)
-
- [1、openpyxl 库介绍](#1、openpyxl 库介绍)
- [2、Python 怎么打开及读取表格内容?](#2、Python 怎么打开及读取表格内容?)
-
- [1)Excel 表格术语](#1)Excel 表格术语)
- [2)打开 Excel 表格并获取表格名称](#2)打开 Excel 表格并获取表格名称)
- [3)通过 sheet 名称获取表格](#3)通过 sheet 名称获取表格)
- 4)获取表格的尺寸大小
- 5)获取表格内某个格子的数据
- 6)获取某个格子的行数、列数、坐标
- 7)获取一系列格子
- [3、Python 如何向 Excel 中写入某些内容?](#3、Python 如何向 Excel 中写入某些内容?)
- 4、批量调整字体和样式
- [章节二: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,使用 PyPDF2 和 pdfplumber 操作 PDF,以及使用 python-docx 操作 Word。
章节一:Python 使用 openpyxl 操作 Excel
openpyxl 是一个用于读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的 Python 库。
1、openpyxl 库介绍
-
安装 :
bashpip 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 中的文本和表格,准确率较高。
-
安装:
bashpip 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 批量加水印及加密、解密
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 文件。
-
安装 :
bashpip 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基础学习专栏