本文目录导读:

我来介绍几种在Python中生成Word文档的常用方法:
使用 python-docx 库(最常用)
安装
pip install python-docx
基本使用示例
from docx import Document
from docx.shared import Pt, Inches, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
# 创建文档
doc = Document()
# 1. 添加标题
doc.add_heading('Python生成的Word文档', level=0)
# 2. 添加段落
p = doc.add_paragraph('这是一段普通文本。')
p.add_run('这是加粗文本。').bold = True
p.add_run('这是斜体文本。').italic = True
# 3. 设置字体和颜色
run = p.add_run('红色字体')
run.font.color.rgb = RGBColor(255, 0, 0)
run.font.size = Pt(14)
run.font.name = '微软雅黑'
# 4. 添加标题
doc.add_heading('第一部分:数据报告', level=1)
doc.add_heading('1.1 数据分析', level=2)
# 5. 添加列表
doc.add_paragraph('项目一', style='List Bullet')
doc.add_paragraph('项目二', style='List Bullet')
doc.add_paragraph('项目三', style='List Number')
# 6. 添加表格
table = doc.add_table(rows=3, cols=4, style='Table Grid')
# 设置表格对齐方式
table.alignment = WD_TABLE_ALIGNMENT.CENTER
# 填充表格数据
data = [
['姓名', '年龄', '城市', '职业'],
['张三', 28, '北京', '工程师'],
['李四', 32, '上海', '设计师']
]
for i, row_data in enumerate(data):
for j, cell_data in enumerate(row_data):
table.rows[i].cells[j].text = str(cell_data)
# 7. 添加图片
doc.add_picture('example.png', width=Inches(4.0))
# 8. 添加分页符
doc.add_page_break()
# 9. 添加带样式的段落
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run('居中显示的文字')
run.font.size = Pt(16)
run.bold = True
# 10. 保存文档
doc.save('output.docx')
print("Word文档已生成:output.docx")
高级功能示例
from docx import Document
from docx.shared import Pt, Inches, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
import datetime
def create_report_document():
"""创建复杂的报告文档"""
doc = Document()
# 设置默认字体
style = doc.styles['Normal']
font = style.font
font.name = '微软雅黑'
font.size = Pt(11)
style.element.rPr.rFonts.set(qn('w:eastAsia'), '微软雅黑')
# 添加页眉
header = doc.sections[0].header
header_para = header.paragraphs[0]
header_para.text = "数据分析报告 - 机密"
header_para.alignment = WD_ALIGN_PARAGRAPH.RIGHT
# 添加封面
doc.add_paragraph()
doc.add_paragraph()
# 封面标题= doc.add_paragraph()alignment = WD_ALIGN_PARAGRAPH.CENTER
run = title.add_run('数据分析报告')
run.font.size = Pt(26)
run.bold = True
run.font.color.rgb = RGBColor(0, 51, 102)
doc.add_paragraph()
# 封面信息
info_data = [
f'生成日期:{datetime.datetime.now().strftime("%Y年%m月%d日")}',
'版本:V1.0',
'制作者:Python自动化'
]
for info in info_data:
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run(info)
run.font.size = Pt(14)
doc.add_page_break()
# 添加目录页(手动)
doc.add_heading('目录', level=1)
content_list = ['1. 概述', '2. 数据统计', '3. 图表分析', '4. 结论与建议']
for item in content_list:
p = doc.add_paragraph(item)
p.paragraph_format.space_after = Pt(6)
doc.add_page_break()
# 正文内容
doc.add_heading('1. 概述', level=1)
doc.add_paragraph(
'本报告基于2024年第一季度数据,对销售业绩进行了全面分析。'
'通过数据挖掘和统计分析,我们发现了多个重要的业务增长点。'
)
# 添加表格数据
doc.add_heading('2. 季度销售数据', level=2)
# 创建样式化的表格
table = doc.add_table(rows=5, cols=4)
table.style = 'Medium Shading 1 Accent 1'
# 表头
headers = ['月份', '销售额(万)', '利润(万)', '增长率']
for i, header in enumerate(headers):
cell = table.rows[0].cells[i]
cell.text = header
cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
# 数据
data = [
['1月', '120', '30', '15%'],
['2月', '150', '45', '25%'],
['3月', '180', '60', '35%'],
['合计', '450', '135', '—']
]
for i, row_data in enumerate(data, 1):
for j, value in enumerate(row_data):
cell = table.rows[i].cells[j]
cell.text = value
cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
# 设置表格宽度
for row in table.rows:
for cell in row.cells:
cell.width = Inches(1.5)
doc.add_paragraph() # 添加空行
# 添加列表
doc.add_heading('3. 关键发现', level=2)
findings = [
'第一季度整体销售业绩稳步增长',
'2月份表现突出,增长率达到25%',
'产品B在华东地区表现最佳'
]
for finding in findings:
doc.add_paragraph(finding, style='List Bullet')
# 添加页脚
footer = doc.sections[0].footer
footer_para = footer.paragraphs[0]
footer_para.text = "第 1 页" # 实际应用中需要页码字段
# 保存文档
doc.save('数据分析报告.docx')
print("报告文档已生成:数据分析报告.docx")
# 运行函数
create_report_document()
使用模板生成文档
from docx import Document
from docx.shared import Pt, Inches
import json
def generate_from_template():
"""使用模板生成文档"""
# 读取模板
template_path = 'template.docx'
doc = Document(template_path)
# 数据字典
data = {
'{{name}}': '张三',
'{{date}}': '2024-01-15',
'{{department}}': '技术部',
'{{content}}': '这是一个使用模板生成的文档示例。'
}
# 替换文档中的占位符
for paragraph in doc.paragraphs:
for key, value in data.items():
if key in paragraph.text:
paragraph.text = paragraph.text.replace(key, value)
# 保持字体格式
for run in paragraph.runs:
if key in run.text:
run.text = run.text.replace(key, value)
# 处理表格中的占位符
for table in doc.tables:
for row in table.rows:
for cell in row.cells:
for key, value in data.items():
if key in cell.text:
cell.text = cell.text.replace(key, value)
doc.save('generated_from_template.docx')
print("模板文档已生成")
# 运行函数
generate_from_template()
批量生成文档
import os
from docx import Document
def batch_generate_documents():
"""批量生成多个文档"""
employees = [
{'name': '张三', 'department': '技术部', 'salary': 15000},
{'name': '李四', 'department': '市场部', 'salary': 12000},
{'name': '王五', 'department': '财务部', 'salary': 13000}
]
# 创建输出目录
output_dir = 'employee_reports'
os.makedirs(output_dir, exist_ok=True)
for emp in employees:
doc = Document()
# 添加内容
doc.add_heading(f'{emp["name"]} - 个人信息报告', level=1)
doc.add_paragraph(f'姓名:{emp["name"]}')
doc.add_paragraph(f'部门:{emp["department"]}')
doc.add_paragraph(f'薪资:{emp["salary"]}元')
# 保存文件
filename = f'{output_dir}/{emp["name"]}_报告.docx'
doc.save(filename)
print(f"已生成:{filename}")
# 运行函数
batch_generate_documents()
使用其他库
docxtpl - 模板引擎方式
pip install docxtpl
from docxtpl import DocxTemplate
def use_docxtpl():
"""使用docxtpl模板引擎"""
doc = DocxTemplate("template.docx")
context = {
'name': '张三',
'date': '2024-01-15',
'items': [
{'desc': '项目A', 'price': 100},
{'desc': '项目B', 'price': 200},
{'desc': '项目C', 'price': 300}
],
'total': 600
}
doc.render(context)
doc.save("docxtpl_output.docx")
# 注:需要先创建包含模板语法的template.docx
注意事项
- 字体兼容性:在不同系统上,某些字体可能不可用
- 图片路径:添加图片时确保路径正确
- 样式管理:合理使用样式可以保持文档一致性
- 内存管理:处理大文档时注意内存使用
- 版本兼容:python-docx支持.docx格式,不支持.doc格式
- python-docx:功能最全面,支持大部分Word操作
- docxtpl:适合模板化文档生成
- 可以根据需求选择合适的库和方法
这些示例涵盖了大多数常见的Word文档生成需求,你可以根据具体场景选择合适的方法。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播