本文目录导读:

在Python中操作Word文档,最常用的库是python-docx,它支持创建、修改和读取.docx文件。
安装
pip install python-docx
基本操作
1 创建和保存文档
from docx import Document
# 创建新文档
doc = Document()
doc.add_heading('Python操作Word文档', level=0)
# 添加段落
doc.add_paragraph('这是一个使用python-docx创建的Word文档。')
# 保存文档
doc.save('example.docx')
2 读取和修改现有文档
from docx import Document
# 打开现有文档
doc = Document('example.docx')
# 读取所有段落
for paragraph in doc.paragraphs:
print(f"段落内容: {paragraph.text}")
print(f"段落样式: {paragraph.style.name}")
# 读取表格
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
print(cell.text)
for heading in doc.headings:
print(f"标题: {heading.text}, 级别: {heading.style.name}")
高级操作
1 格式化文本
from docx import Document
from docx.shared import Pt, Inches, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
doc = Document()
# 添加带格式的段落
paragraph = doc.add_paragraph()
run = paragraph.add_run('加粗文本')
run.bold = True
run = paragraph.add_run('\n斜体文本')
run.italic = True
run = paragraph.add_run('\n带下划线文本')
run.underline = True
# 设置字体大小和颜色
run = paragraph.add_run('\n红色大号字体')
run.font.size = Pt(24)
run.font.color.rgb = RGBColor(255, 0, 0)
# 设置段落对齐方式
paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
doc.save('formatted.docx')
2 插入图片
from docx import Document
from docx.shared import Inches, Pt
doc = Document()
doc.add_heading('图片插入示例', level=1)
# 插入图片
doc.add_picture('image.jpg', width=Inches(5))
# 在图片下方添加说明文字
caption = doc.add_paragraph('图1: 示例图片')
caption.alignment = 1 # 居中
# 设置图片大小(可选择不同单位)
from docx.shared import Cm, Emu
# 使用厘米
doc.add_picture('image.jpg', width=Cm(10))
# 保持原图比例,只设置宽度
doc.add_picture('image.jpg', width=Inches(4))
doc.save('image_example.docx')
3 表格操作
from docx import Document
from docx.shared import Pt, Cm
from docx.enum.table import WD_TABLE_ALIGNMENT
doc = Document()
doc.add_heading('表格示例', level=1)
# 创建表格(3行4列)
table = doc.add_table(rows=3, cols=4, style='Table Grid')
table.alignment = WD_TABLE_ALIGNMENT.CENTER
# 填充表头
headers = ['姓名', '年龄', '城市', '职业']
for i, header in enumerate(headers):
cell = table.rows[0].cells[i]
cell.text = header
# 设置表头加粗
for paragraph in cell.paragraphs:
for run in paragraph.runs:
run.bold = True
# 填充数据
data = [
['张三', '28', '北京', '工程师'],
['李四', '25', '上海', '设计师']
]
for i, row_data in enumerate(data, start=1):
for j, value in enumerate(row_data):
table.rows[i].cells[j].text = value
# 设置列宽
for column in table.columns:
column.width = Cm(4)
# 合并单元格
table.cell(0, 0).merge(table.cell(0, 1)) # 合并第一行的前两个单元格
doc.save('table_example.docx')
4 列表和项目符号
from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
doc = Document()
doc.add_heading('列表操作', level=1)
# 无序列表
doc.add_paragraph('项目1', style='List Bullet')
doc.add_paragraph('项目2', style='List Bullet')
doc.add_paragraph('项目3', style='List Bullet')
# 有序列表
doc.add_paragraph('第一项', style='List Number')
doc.add_paragraph('第二项', style='List Number')
doc.add_paragraph('第三项', style='List Number')
# 多级列表(手动缩进)
indented_para = doc.add_paragraph('子项目', style='List Bullet 2')
doc.save('list_example.docx')
5 添加页眉页脚
from docx import Document
from docx.shared import Pt
doc = Document()
# 添加页眉
section = doc.sections[0]
header = section.header
header_para = header.paragraphs[0]
header_para.text = "这是页眉"
header_para.alignment = 1 # 居中
# 添加页脚
footer = section.footer
footer_para = footer.paragraphs[0]
footer_para.text = "页码:"
# 添加自动页码
from docx.oxml.ns import qn
run = footer_para.add_run()
fldChar1 = run._r.makeelement(qn('w:fldChar'), {qn('w:fldCharType'): 'begin'})
run._r.append(fldChar1)
run2 = footer_para.add_run()
instrText = run2._r.makeelement(qn('w:instrText'), {})
instrText.text = ' PAGE '
run2._r.append(instrText)
run3 = footer_para.add_run()
fldChar2 = run3._r.makeelement(qn('w:fldChar'), {qn('w:fldCharType'): 'end'})
run3._r.append(fldChar2)
doc.save('header_footer.docx')
实用案例
案例1:批量生成报表
from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
import datetime
def generate_report(data, template_file=None):
"""
生成Word报告
Args:
data: 包含报告数据的字典
template_file: 可选模板文件路径
"""
if template_file:
doc = Document(template_file)
else:
doc = Document()
# 添加标题= doc.add_heading('销售报告', level=0)alignment = WD_ALIGN_PARAGRAPH.CENTER
# 添加日期
date_para = doc.add_paragraph(f'生成日期:{datetime.datetime.now().strftime("%Y-%m-%d")}')
date_para.alignment = WD_ALIGN_PARAGRAPH.RIGHT
# 添加摘要
doc.add_paragraph(f'总销售额:{data["total_sales"]}')
doc.add_paragraph(f'订单数量:{data["order_count"]}')
# 添加表格
table = doc.add_table(rows=1, cols=len(data['columns']))
table.style = 'Light Shading Accent 1'
# 表头
for i, col in enumerate(data['columns']):
table.rows[0].cells[i].text = col
# 数据行
for row_data in data['rows']:
row = table.add_row()
for i, value in enumerate(row_data):
row.cells[i].text = str(value)
# 保存
filename = f'sales_report_{datetime.datetime.now().strftime("%Y%m%d")}.docx'
doc.save(filename)
return filename
# 使用示例
sales_data = {
'total_sales': '$50,000',
'order_count': 150,
'columns': ['产品', '销量', '金额'],
'rows': [
['产品A', '100', '$20,000'],
['产品B', '50', '$30,000']
]
}
report_file = generate_report(sales_data)
print(f"报告已生成:{report_file}")
案例2:提取文档内容
from docx import Document
import re
def extract_document_content(file_path):
"""
提取Word文档内容
Args:
file_path: Word文档路径
Returns:
包含提取内容的字典
"""
doc = Document(file_path)
content = {
'text': [],
'tables': [],
'images': 0,
'headings': []
}
# 提取段落文本
for paragraph in doc.paragraphs:
if paragraph.text.strip():
content['text'].append({
'text': paragraph.text,
'style': paragraph.style.name
})
# 提取标题
for heading in doc.headings:
content['headings'].append({
'text': heading.text,
'level': heading.style.name
})
# 提取表格数据
for table in doc.tables:
table_data = []
for row in table.rows:
row_data = [cell.text for cell in row.cells]
table_data.append(row_data)
content['tables'].append(table_data)
# 统计图片数量(通过检查内联形状)
for shape in doc.inline_shapes:
if shape.type == 3: # 图片类型
content['images'] += 1
return content
# 使用示例
content = extract_document_content('example.docx')
print(f"段落数:{len(content['text'])}")
print(f"表格数:{len(content['tables'])}")
print(f"图片数:{content['images']}")
注意事项
- 性能优化:处理大型文档时,建议逐段读取而不是一次性加载整个文档
- 编码问题:确保使用UTF-8编码处理中文
- 兼容性:python-docx只支持.docx格式,不支持旧的.doc格式
常用第三方库对比
| 库名称 | 优势 | 劣势 |
|---|---|---|
| python-docx | API友好,文档完善 | 只支持.docx |
| win32com | 支持所有Word功能 | 仅Windows,需要安装Office |
| pywin32 | 全面控制Word | 学习曲线陡峭 |
python-docx是最推荐的选择,对于大多数应用场景已经足够使用。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播