文章目录
- 前言
- [一、为什么需要自动化操作 Word?](#一、为什么需要自动化操作 Word?)
- [二、创建和写入 Word 文档](#二、创建和写入 Word 文档)
-
- [2.1 基本文档结构](#2.1 基本文档结构)
- [2.2 标题和段落](#2.2 标题和段落)
- [2.3 高级文本格式化](#2.3 高级文本格式化)
- [2.4 创建和格式化表格](#2.4 创建和格式化表格)
- [2.5 插入图片和分页](#2.5 插入图片和分页)
- [2.6 自定义样式和模板](#2.6 自定义样式和模板)
- [三、 读取和分析 Word 文档](#三、 读取和分析 Word 文档)
- 四、实际应用示例
-
- [4.1 自动生成报告](#4.1 自动生成报告)
- [4.2 批量处理 Word 文档](#4.2 批量处理 Word 文档)
- 总结
前言
本文主要介绍创建和写入 Word 文档、读取和分析 Word 文档及实际应用示例等知识点。
一、为什么需要自动化操作 Word?
Microsoft Word 是全球使用最广泛的文字处理工具之一。在日常工作中,我们经常需要处理各种 Word 文档,如报告、合同、简历、手册等。手动操作 Word 不仅效率低下,而且在处理大量文档或重复性任务时容易出错。
Python 的 python-docx 库为 Word 文档的自动化操作提供了强大的支持,能够实现:
- 批量生成标准格式的文档
- 自动填充模板内容
- 文档格式的统一调整
- 数据报表的自动生成
安装 python-docx
bash
bash
# 安装 python-docx
pip install python-docx
# 如果下载速度慢,可以使用国内镜像
pip install python-docx -i https://pypi.tuna.tsinghua.edu.cn/simple
二、创建和写入 Word 文档
2.1 基本文档结构
python
python
from docx import Document
from docx.shared import Pt, Inches, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_LINE_SPACING
from docx.enum.style import WD_STYLE_TYPE
import os
class WordDocumentCreator:
"""Word文档创建器"""
def __init__(self, filename="demo.docx"):
self.document = Document()
self.filename = filename
def save(self):
"""保存文档"""
self.document.save(self.filename)
print(f"文档已保存: {os.path.abspath(self.filename)}")
return self.filename
# 创建文档实例
doc_creator = WordDocumentCreator("示例文档.docx")
2.2 标题和段落
python
python
def add_titles_and_paragraphs(doc):
"""添加标题和段落"""
# 添加文档标题(0级标题,最大)
title = doc.add_heading('Python自动化办公:Word文档操作指南', 0)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER # 居中
# 添加作者信息
doc.add_paragraph('作者:Python自动化团队')
doc.add_paragraph('创建日期:2024年1月')
doc.add_paragraph('-' * 50) # 分隔线
# 添加章节标题
doc.add_heading('第一章:引言', 1)
# 添加段落
intro_para = doc.add_paragraph('在现代办公环境中,')
intro_para.add_run('Microsoft Word').bold = True
intro_para.add_run(' 是最常用的文档处理工具之一。然而,手动处理大量文档或重复性任务不仅耗时耗力,还容易出现错误。')
# 添加另一个段落
doc.add_paragraph('Python 的 python-docx 库为 Word 自动化提供了完整的解决方案,能够实现文档的创建、编辑、格式化等操作,极大提高了工作效率。')
# 添加章节标题
doc.add_heading('1.1 自动化办公的优势', 2)
# 添加带项目符号的列表
doc.add_paragraph('提高工作效率:自动化处理重复性任务', style='List Bullet')
doc.add_paragraph('减少人为错误:确保文档格式和内容的一致性', style='List Bullet')
doc.add_paragraph('批量处理能力:同时处理成百上千个文档', style='List Bullet')
doc.add_paragraph('易于维护:修改模板即可更新所有生成的文档', style='List Bullet')
# 添加带编号的列表
doc.add_paragraph('安装 python-docx 库', style='List Number')
doc.add_paragraph('了解基本文档结构', style='List Number')
doc.add_paragraph('掌握文本格式化方法', style='List Number')
doc.add_paragraph('学习表格和图片插入', style='List Number')
return doc
# 应用函数
add_titles_and_paragraphs(doc_creator.document)
2.3 高级文本格式化
python
python
def add_formatted_text(doc):
"""添加格式化文本"""
# 添加章节标题
doc.add_heading('第二章:文本格式化', 1)
# 段落对齐示例
doc.add_heading('2.1 段落对齐', 2)
# 左对齐(默认)
left_aligned = doc.add_paragraph('左对齐文本(默认对齐方式)')
left_aligned.alignment = WD_ALIGN_PARAGRAPH.LEFT
# 居中对齐
center_aligned = doc.add_paragraph('居中对齐文本')
center_aligned.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 右对齐
right_aligned = doc.add_paragraph('右对齐文本')
right_aligned.alignment = WD_ALIGN_PARAGRAPH.RIGHT
# 两端对齐
justified = doc.add_paragraph('两端对齐文本:Python 的 python-docx 库为 Word 文档操作提供了完整的解决方案,支持创建、编辑、格式化等各种操作。')
justified.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
# 字体格式示例
doc.add_heading('2.2 字体格式', 2)
para = doc.add_paragraph('字体格式示例:')
# 加粗文本
para.add_run(' 加粗文本').bold = True
# 斜体文本
para.add_run(' 斜体文本').italic = True
# 下划线文本
para.add_run(' 下划线文本').underline = True
# 删除线文本
run = para.add_run(' 删除线文本')
run.font.strike = True
# 上标和下标
para.add_run(' 上标:X')
superscript = para.add_run('2')
superscript.font.superscript = True
para.add_run(' 下标:H')
subscript = para.add_run('2')
subscript.font.subscript = True
# 字体颜色
para.add_run(' 红色文本').font.color.rgb = RGBColor(255, 0, 0)
para.add_run(' 蓝色文本').font.color.rgb = RGBColor(0, 0, 255)
para.add_run(' 绿色文本').font.color.rgb = RGBColor(0, 128, 0)
# 字体大小
doc.add_heading('2.3 字体大小', 2)
size_para = doc.add_paragraph('不同字体大小:')
sizes = [8, 10, 12, 14, 16, 18, 20, 24, 28, 36]
for size in sizes:
run = size_para.add_run(f' {size}pt')
run.font.size = Pt(size)
if size >= 18:
run.bold = True
# 行间距和段落间距
doc.add_heading('2.4 段落格式', 2)
spacing_para = doc.add_paragraph('这是单倍行距的段落。' * 5)
spacing_para.paragraph_format.line_spacing = 1.0
spacing_para = doc.add_paragraph('这是1.5倍行距的段落。' * 5)
spacing_para.paragraph_format.line_spacing = 1.5
spacing_para = doc.add_paragraph('这是2倍行距的段落。' * 5)
spacing_para.paragraph_format.line_spacing = 2.0
# 首行缩进
indent_para = doc.add_paragraph('这是首行缩进2字符的段落。' * 3)
indent_para.paragraph_format.first_line_indent = Cm(0.74) # 2字符 ≈ 0.74cm
return doc
add_formatted_text(doc_creator.document)
2.4 创建和格式化表格
python
python
def add_tables(doc):
"""添加和格式化表格"""
# 添加章节标题
doc.add_heading('第三章:表格操作', 1)
# 简单表格
doc.add_heading('3.1 基本表格', 2)
# 创建3行4列的表格
table = doc.add_table(rows=4, cols=3)
table.style = 'Light Grid Accent 1' # 使用预定义样式
# 设置表头
headers = table.rows[0].cells
headers[0].text = '序号'
headers[1].text = '姓名'
headers[2].text = '成绩'
# 加粗表头
for cell in headers:
for paragraph in cell.paragraphs:
for run in paragraph.runs:
run.bold = True
# 填充数据
data = [
[1, '张三', 85],
[2, '李四', 92],
[3, '王五', 78]
]
for i, row_data in enumerate(data, start=1):
row_cells = table.rows[i].cells
row_cells[0].text = str(row_data[0])
row_cells[1].text = row_data[1]
row_cells[2].text = str(row_data[2])
# 复杂表格示例
doc.add_heading('3.2 复杂表格', 2)
complex_table = doc.add_table(rows=6, cols=5)
complex_table.style = 'Medium Shading 1 Accent 1'
# 合并单元格示例
# 合并第一行的前两个单元格作为标题
complex_table.cell(0, 0).merge(complex_table.cell(0, 1))
complex_table.cell(0, 0).text = '季度销售报表'
complex_table.cell(0, 0).paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
# 设置列标题
col_headers = ['季度', '产品A', '产品B', '产品C', '总计']
for i, header in enumerate(col_headers):
cell = complex_table.cell(1, i)
cell.text = header
cell.paragraphs[0].runs[0].bold = True
# 填充数据
quarterly_data = [
['Q1', 1250000, 980000, 750000, None],
['Q2', 1380000, 1050000, 820000, None],
['Q3', 1520000, 1120000, 910000, None],
['Q4', 1680000, 1280000, 1050000, None],
]
for i, row_data in enumerate(quarterly_data, start=2):
for j, value in enumerate(row_data):
cell = complex_table.cell(i, j)
if value is None:
# 计算总计
formula = f'=SUM(B{i+1}:D{i+1})'
cell.text = formula
else:
if isinstance(value, int):
# 格式化数字
cell.text = f'¥{value:,}'
else:
cell.text = str(value)
# 右对齐数字
if j > 0:
cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.RIGHT
# 添加汇总行
summary_row = complex_table.add_row().cells
summary_row[0].text = '年度总计'
for j in range(1, 5):
formula = f'=SUM({chr(65+j)}3:{chr(65+j)}6)' # B3:B6, C3:C6, ...
summary_row[j].text = formula
summary_row[j].paragraphs[0].runs[0].bold = True
# 表格格式调整
doc.add_heading('3.3 表格格式控制', 2)
# 创建自定义格式的表格
custom_table = doc.add_table(rows=5, cols=4)
# 手动设置表格样式
for i, row in enumerate(custom_table.rows):
for j, cell in enumerate(row.cells):
cell.text = f'行{i+1}列{j+1}'
# 交替行颜色
if i % 2 == 0:
# 设置背景色
for paragraph in cell.paragraphs:
for run in paragraph.runs:
run.font.color.rgb = RGBColor(0, 0, 0)
# 设置边框
for paragraph in cell.paragraphs:
paragraph.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.CENTER
return doc
add_tables(doc_creator.document)
2.5 插入图片和分页
python
python
def add_images_and_page_breaks(doc):
"""添加图片和分页符"""
# 添加章节标题
doc.add_heading('第四章:图片和分页', 1)
# 添加分页符
doc.add_page_break()
# 图片操作
doc.add_heading('4.1 插入图片', 2)
# 检查示例图片是否存在
sample_images = ['sample.jpg', 'example.png', 'demo.jpg']
image_added = False
for img_file in sample_images:
if os.path.exists(img_file):
try:
# 插入图片(指定宽度)
doc.add_paragraph('插入图片(宽度6厘米):')
doc.add_picture(img_file, width=Cm(6))
# 插入图片(指定高度)
doc.add_paragraph('插入图片(高度4厘米):')
doc.add_picture(img_file, height=Cm(4))
# 插入图片并居中对齐
doc.add_paragraph('居中对齐的图片:')
picture_para = doc.add_paragraph()
run = picture_para.add_run()
run.add_picture(img_file, width=Cm(8))
picture_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
image_added = True
break
except Exception as e:
print(f"插入图片失败: {e}")
if not image_added:
# 如果没有找到图片文件,添加占位文本
doc.add_paragraph('(此处应显示图片,但未找到示例图片文件)')
doc.add_paragraph('请将图片文件重命名为 sample.jpg、example.png 或 demo.jpg 并放在当前目录下。')
# 图片环绕文字示例
doc.add_heading('4.2 图文混排', 2)
# 创建图文混排段落
mixed_para = doc.add_paragraph()
# 添加文字
mixed_para.add_run('左侧是文字,右侧是图片。这是一段示例文本,用于演示图文混排效果。' * 5)
# 注意:python-docx 对图文混排的支持有限
# 复杂的版面设计可能需要其他方法
# 添加另一个分页符
doc.add_page_break()
# 添加附录
doc.add_heading('附录', 1)
doc.add_paragraph('本文档由 Python 脚本自动生成。')
doc.add_paragraph(f'生成时间:{os.path.basename(doc_creator.filename)}')
return doc
add_images_and_page_breaks(doc_creator.document)
2.6 自定义样式和模板
python
python
def create_custom_styles(doc):
"""创建自定义样式"""
# 获取样式对象
styles = doc.styles
# 创建自定义段落样式
if 'MyHeading' not in styles:
my_heading = styles.add_style('MyHeading', WD_STYLE_TYPE.PARAGRAPH)
my_heading.font.name = '微软雅黑'
my_heading.font.size = Pt(16)
my_heading.font.bold = True
my_heading.font.color.rgb = RGBColor(0, 51, 102)
my_heading.paragraph_format.space_before = Pt(12)
my_heading.paragraph_format.space_after = Pt(6)
# 创建自定义正文样式
if 'MyBody' not in styles:
my_body = styles.add_style('MyBody', WD_STYLE_TYPE.PARAGRAPH)
my_body.font.name = '宋体'
my_body.font.size = Pt(11)
my_body.paragraph_format.line_spacing = 1.5
my_body.paragraph_format.first_line_indent = Cm(0.74)
# 创建自定义强调样式
if 'MyEmphasis' not in styles:
my_emphasis = styles.add_style('MyEmphasis', WD_STYLE_TYPE.CHARACTER)
my_emphasis.font.italic = True
my_emphasis.font.color.rgb = RGBColor(220, 0, 0)
# 应用自定义样式
doc.add_paragraph('自定义标题样式', style='MyHeading')
doc.add_paragraph('这是使用自定义正文样式的段落。' * 3, style='MyBody')
para = doc.add_paragraph('这是包含')
run = para.add_run('自定义强调样式')
run.style = 'MyEmphasis'
para.add_run('的文本。')
return doc
# 在适当位置调用
# create_custom_styles(doc_creator.document)
三、 读取和分析 Word 文档
python
python
class WordDocumentAnalyzer:
"""Word文档分析器"""
def __init__(self, filepath):
self.filepath = filepath
self.document = Document(filepath)
self.analysis_results = {}
def analyze_document(self):
"""分析文档结构"""
print("=" * 60)
print(f"文档分析报告: {os.path.basename(self.filepath)}")
print("=" * 60)
# 分析段落
paragraphs = list(self.document.paragraphs)
self.analysis_results['paragraph_count'] = len(paragraphs)
print(f"\n1. 段落分析:")
print(f" 总段落数: {len(paragraphs)}")
# 统计不同样式的段落
style_count = {}
for para in paragraphs:
style = para.style.name if para.style else '无样式'
style_count[style] = style_count.get(style, 0) + 1
print(f" 段落样式分布:")
for style, count in sorted(style_count.items()):
print(f" {style}: {count}个")
# 分析标题结构
print(f"\n2. 标题结构:")
heading_levels = {}
for para in paragraphs:
if para.style.name.startswith('Heading'):
level = para.style.name.replace('Heading ', '')
heading_levels[level] = heading_levels.get(level, 0) + 1
print(f" {para.style.name}: {para.text}")
self.analysis_results['heading_count'] = sum(heading_levels.values())
# 分析表格
tables = list(self.document.tables)
self.analysis_results['table_count'] = len(tables)
print(f"\n3. 表格分析:")
print(f" 总表格数: {len(tables)}")
for i, table in enumerate(tables, 1):
print(f"\n 表格{i}: {len(table.rows)}行 × {len(table.columns)}列")
# 显示表格内容(前3行)
max_rows_to_show = min(3, len(table.rows))
for row_idx in range(max_rows_to_show):
row_data = []
for cell in table.rows[row_idx].cells:
row_data.append(cell.text.strip())
print(f" 第{row_idx+1}行: {' | '.join(row_data)}")
# 分析图片
image_count = 0
for rel in self.document.part.rels.values():
if "image" in rel.target_ref:
image_count += 1
self.analysis_results['image_count'] = image_count
print(f"\n4. 图片分析:")
print(f" 总图片数: {image_count}")
# 文本内容统计
print(f"\n5. 文本内容统计:")
total_chars = 0
total_words = 0
for para in paragraphs:
text = para.text.strip()
if text:
total_chars += len(text)
total_words += len(text.split())
self.analysis_results['total_characters'] = total_chars
self.analysis_results['total_words'] = total_words
print(f" 总字符数: {total_chars}")
print(f" 总词数: {total_words}")
if total_words > 0:
avg_word_length = total_chars / total_words
print(f" 平均词长: {avg_word_length:.1f}字符")
# 查找特定内容
print(f"\n6. 关键词搜索:")
keywords = ['Python', '自动化', '文档', '表格']
for keyword in keywords:
occurrences = []
for para in paragraphs:
if keyword in para.text:
occurrences.append(para.text[:50] + "..." if len(para.text) > 50 else para.text)
if occurrences:
print(f" '{keyword}' 出现 {len(occurrences)} 次")
for i, occ in enumerate(occurrences[:2], 1): # 显示前2个
print(f" 示例{i}: {occ}")
else:
print(f" '{keyword}' 未找到")
return self.analysis_results
def extract_tables_to_csv(self):
"""提取表格数据到CSV"""
import csv
tables = self.document.tables
if not tables:
print("文档中没有表格")
return
for i, table in enumerate(tables, 1):
csv_filename = f"table_{i}.csv"
with open(csv_filename, 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.writer(csvfile)
for row in table.rows:
row_data = [cell.text.strip() for cell in row.cells]
writer.writerow(row_data)
print(f"表格{i}已导出到: {csv_filename}")
def find_and_replace(self, old_text, new_text):
"""查找并替换文本"""
changes_made = 0
# 在段落中查找替换
for paragraph in self.document.paragraphs:
if old_text in paragraph.text:
paragraph.text = paragraph.text.replace(old_text, new_text)
changes_made += 1
# 在表格中查找替换
for table in self.document.tables:
for row in table.rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
if old_text in paragraph.text:
paragraph.text = paragraph.text.replace(old_text, new_text)
changes_made += 1
if changes_made > 0:
new_filename = f"modified_{os.path.basename(self.filepath)}"
self.document.save(new_filename)
print(f"完成 {changes_made} 处替换,新文件: {new_filename}")
else:
print(f"未找到文本: '{old_text}'")
return changes_made
# 使用示例
if __name__ == "__main__":
# 首先保存创建的文档
doc_creator.save()
# 分析文档
analyzer = WordDocumentAnalyzer(doc_creator.filename)
results = analyzer.analyze_document()
# 导出表格
analyzer.extract_tables_to_csv()
# 查找替换示例
# analyzer.find_and_replace("Python", "Python编程")
四、实际应用示例
4.1 自动生成报告
python
python
def generate_monthly_report(data, output_file="月度报告.docx"):
"""生成月度报告"""
doc = Document()
# 添加报告标题
title = doc.add_heading('月度工作报告', 0)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 添加基本信息
doc.add_paragraph(f'报告月份: {data["month"]}')
doc.add_paragraph(f'生成日期: {data["generation_date"]}')
doc.add_paragraph(f'报告人: {data["author"]}')
doc.add_paragraph('-' * 50)
# 工作概述
doc.add_heading('一、工作概述', 1)
doc.add_paragraph(data['overview'])
# 工作成果
doc.add_heading('二、主要工作成果', 1)
for i, achievement in enumerate(data['achievements'], 1):
doc.add_heading(f'{i}. {achievement["title"]}', 2)
doc.add_paragraph(achievement['description'])
if 'metrics' in achievement:
table = doc.add_table(rows=len(achievement['metrics']) + 1, cols=2)
table.style = 'Light Grid Accent 1'
# 表头
table.cell(0, 0).text = '指标'
table.cell(0, 1).text = '数值'
# 数据
for j, (metric, value) in enumerate(achievement['metrics'].items(), start=1):
table.cell(j, 0).text = metric
table.cell(j, 1).text = str(value)
# 问题和挑战
if 'challenges' in data:
doc.add_heading('三、遇到的问题与挑战', 1)
for i, challenge in enumerate(data['challenges'], 1):
doc.add_paragraph(f'{i}. {challenge}', style='List Bullet')
# 下月计划
doc.add_heading('四、下月工作计划', 1)
table = doc.add_table(rows=len(data['next_month_plans']) + 1, cols=3)
table.style = 'Medium Shading 1 Accent 1'
# 表头
headers = ['序号', '工作计划', '预期完成时间']
for i, header in enumerate(headers):
table.cell(0, i).text = header
# 计划内容
for i, plan in enumerate(data['next_month_plans'], start=1):
table.cell(i, 0).text = str(i)
table.cell(i, 1).text = plan['task']
table.cell(i, 2).text = plan['deadline']
# 总结
doc.add_heading('五、总结', 1)
doc.add_paragraph(data['summary'])
# 保存文档
doc.save(output_file)
print(f"月度报告已生成: {output_file}")
return output_file
# 使用示例
report_data = {
'month': '2024年1月',
'generation_date': '2024-01-31',
'author': '张三',
'overview': '本月主要完成了项目开发、团队管理和技术学习等工作。',
'achievements': [
{
'title': '项目开发',
'description': '完成了核心功能模块的开发工作。',
'metrics': {'完成模块数': 5, '代码行数': 15000, 'Bug修复数': 12}
},
{
'title': '团队管理',
'description': '组织了3次团队技术分享会。',
'metrics': {'团队会议': 8, '技术分享': 3, '新人培训': 2}
}
],
'challenges': [
'项目进度比预期延迟了2天',
'部分技术难点需要进一步研究'
],
'next_month_plans': [
{'task': '完成项目测试阶段', 'deadline': '2024-02-15'},
{'task': '准备项目上线', 'deadline': '2024-02-28'},
{'task': '团队技术培训', 'deadline': '2024-02-20'}
],
'summary': '本月工作总体进展顺利,下月将继续努力完成项目目标。'
}
# generate_monthly_report(report_data)
4.2 批量处理 Word 文档
python
python
import os
import glob
from docx import Document
class WordBatchProcessor:
"""Word文档批量处理器"""
def __init__(self, input_folder, output_folder=None):
self.input_folder = input_folder
self.output_folder = output_folder or f"{input_folder}_processed"
# 创建输出文件夹
os.makedirs(self.output_folder, exist_ok=True)
def process_all_documents(self, process_function):
"""处理所有文档"""
# 查找所有Word文档
doc_files = glob.glob(os.path.join(self.input_folder, "*.docx"))
docx_files = glob.glob(os.path.join(self.input_folder, "*.docx"))
all_files = doc_files + docx_files
print(f"找到 {len(all_files)} 个Word文档")
processed_files = []
for file_path in all_files:
try:
print(f"正在处理: {os.path.basename(file_path)}")
# 处理文档
result = process_function(file_path)
# 保存处理后的文档
output_path = os.path.join(
self.output_folder,
f"processed_{os.path.basename(file_path)}"
)
result.save(output_path)
processed_files.append(output_path)
print(f" 已保存: {os.path.basename(output_path)}")
except Exception as e:
print(f" 处理失败: {e}")
print(f"\n处理完成! 共处理 {len(processed_files)} 个文档")
return processed_files
@staticmethod
def add_watermark(input_file):
"""添加水印到文档(示例处理函数)"""
doc = Document(input_file)
# 在文档开头添加水印信息
watermark = doc.add_paragraph()
watermark.add_run("内部文档 - 请勿外传").bold = True
watermark.add_run(f" 处理时间: {os.path.basename(input_file)}")
return doc
@staticmethod
def update_template(input_file, replacements):
"""更新模板内容(示例处理函数)"""
doc = Document(input_file)
# 在所有段落中查找替换
for paragraph in doc.paragraphs:
for old_text, new_text in replacements.items():
if old_text in paragraph.text:
paragraph.text = paragraph.text.replace(old_text, new_text)
# 在表格中查找替换
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
for paragraph in cell.paragraphs:
for old_text, new_text in replacements.items():
if old_text in paragraph.text:
paragraph.text = paragraph.text.replace(old_text, new_text)
return doc
# 使用示例
if __name__ == "__main__":
# 创建批量处理器
processor = WordBatchProcessor("./documents")
# 批量添加水印
# processed = processor.process_all_documents(processor.add_watermark)
# 批量更新模板
replacements = {
"[公司名称]": "某某科技有限公司",
"[联系人]": "李四",
"[电话]": "138-0013-8000",
"[日期]": "2024-01-31"
}
# 使用lambda函数传递额外参数
# processed = processor.process_all_documents(
# lambda file_path: processor.update_template(file_path, replacements)
# )
总结
Python 的 python-docx 库为 Word 文档自动化提供了强大的功能,包括:
- 文档创建和编辑:轻松创建新的Word文档或编辑现有文档
- 文本格式化:支持丰富的文本格式设置,包括字体、颜色、大小、对齐等
- 表格操作:创建、填充和格式化表格
- 图片插入:在文档中插入和调整图片
- 样式管理:使用预定义样式或创建自定义样式
- 批量处理:自动化处理大量文档
通过掌握这些技能,你可以:
- 自动化生成报告、合同、信函等标准文档
- 批量处理文档格式和内容
- 从数据源自动生成数据驱动的文档
- 提高文档处理效率和准确性
记得在实际使用时,根据具体需求调整代码,并注意处理可能出现的异常情况。