本文目录导读:
我来为您提供几个Python生成Word文档的实用案例,主要使用python-docx库。
环境准备
pip install python-docx
案例1:基础文档生成
from docx import Document
from docx.shared import Pt, Inches, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
def create_basic_document():
# 创建文档对象
doc = Document()
# 添加标题
doc.add_heading('Python生成的Word文档', level=0)
# 添加段落
p = doc.add_paragraph('这是一个由Python自动生成的Word文档。')
p.alignment = WD_ALIGN_PARAGRAPH.LEFT
# 添加格式化文本
p = doc.add_paragraph()
run = p.add_run('加粗文本')
run.bold = True
run.font.size = Pt(14)
run.font.color.rgb = RGBColor(0xFF, 0x00, 0x00)
p.add_run('普通文本')
# 添加标题
doc.add_heading('二级标题', level=1)
doc.add_heading('三级标题', level=2)
# 保存文档
doc.save('基础文档.docx')
print("基础文档已生成!")
create_basic_document()
案例2:添加表格
from docx import Document
from docx.shared import Pt, Cm
from docx.enum.table import WD_TABLE_ALIGNMENT
def create_table_document():
doc = Document()
doc.add_heading('销售数据报表', level=0)
# 创建表格数据
data = [
['产品名称', '销量', '单价', '总金额'],
['笔记本电脑', '100', '5999', '599900'],
['手机', '200', '2999', '599800'],
['平板电脑', '150', '3999', '599850'],
]
# 添加表格
table = doc.add_table(rows=len(data), cols=len(data[0]))
table.style = 'Light Grid Accent 1'
table.alignment = WD_TABLE_ALIGNMENT.CENTER
# 填充数据
for i, row_data in enumerate(data):
for j, cell_data in enumerate(row_data):
cell = table.cell(i, j)
cell.text = str(cell_data)
# 设置表头格式
if i == 0:
for paragraph in cell.paragraphs:
paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
for run in paragraph.runs:
run.bold = True
# 设置表格宽度
for row in table.rows:
for cell in row.cells:
cell.width = Cm(3.5)
doc.save('表格文档.docx')
print("表格文档已生成!")
create_table_document()
案例3:插入图片和样式
from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.style import WD_STYLE_TYPE
def create_image_document():
doc = Document()
# 自定义样式
style = doc.styles.add_style('CustomStyle', WD_STYLE_TYPE.PARAGRAPH)
style.font.size = Pt(12)
style.font.color.rgb = RGBColor(0x33, 0x66, 0x99)
style.paragraph_format.space_after = Pt(10)
doc.add_heading('图文并茂的文档', level=0)
# 添加文本段落
p = doc.add_paragraph('这是一段带有自定义样式的文本。', style='CustomStyle')
p.alignment = WD_ALIGN_PARAGRAPH.LEFT
# 添加图片(需要图片文件)
try:
doc.add_picture('example.jpg', width=Inches(4.0))
doc.paragraphs[-1].alignment = WD_ALIGN_PARAGRAPH.CENTER
except:
# 如果没有图片,创建占位符
doc.add_paragraph('[图片占位符 - 请将图片命名为 example.jpg 放在当前目录]')
# 添加项目符号列表
doc.add_heading('功能特点', level=1)
features = ['自动生成文档', '支持表格处理', '图片插入功能', '样式自定义']
for feature in features:
doc.add_paragraph(feature, style='List Bullet')
# 添加编号列表
doc.add_heading('操作步骤', level=1)
steps = ['安装 python-docx', '导入必要库', '创建文档对象', '添加内容']
for i, step in enumerate(steps, 1):
doc.add_paragraph(f'{i}. {step}')
doc.save('图文文档.docx')
print("图文文档已生成!")
create_image_document()
案例4:页眉页脚与页面设置
from docx import Document
from docx.shared import Pt, Cm, Inches
from docx.enum.section import WD_ORIENT
def create_professional_document():
doc = Document()
# 页面设置
section = doc.sections[0]
section.page_width = Cm(21) # A4
section.page_height = Cm(29.7)
section.top_margin = Cm(2.5)
section.bottom_margin = Cm(2.5)
section.left_margin = Cm(3)
section.right_margin = Cm(3)
# 页眉
header = section.header
header_para = header.paragraphs[0]
header_para.text = "公司内部文档"
header_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 页脚
footer = section.footer
footer_para = footer.paragraphs[0]
footer_para.text = "第 1 页"
footer_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
# 分隔线
doc.add_paragraph('_' * 50)
# 正文内容
doc.add_heading('正式报告', level=0)
doc.add_paragraph('''
这是一份正式的报告文档,文档包含了完整的页面设置,
包括页眉、页脚、页面边距等专业文档必备的元素。
'''.strip())
# 分页
doc.add_page_break()
doc.add_heading('第二页内容', level=1)
doc.add_paragraph('这是第二页的内容,演示了分页功能。')
doc.save('专业文档.docx')
print("专业文档已生成!")
create_professional_document()
案例5:完整报告生成器
from docx import Document
from docx.shared import Inches, Pt, RGBColor, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from datetime import datetime
class ReportGenerator:
def __init__(self, title, author):
self.doc = Document()
self.title = title
self.author = author
self.current_date = datetime.now().strftime("%Y-%m-%d")
def create_cover_page(self):
"""创建封面"""
# 空行
for _ in range(6):
self.doc.add_paragraph()
# 标题
title_para = self.doc.add_paragraph()
title_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = title_para.add_run(self.title)
run.font.size = Pt(26)
run.bold = True
run.font.color.rgb = RGBColor(0, 51, 102)
# 空行
self.doc.add_paragraph()
# 作者和日期
info_para = self.doc.add_paragraph()
info_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = info_para.add_run(f"作者:{self.author}")
run.font.size = Pt(14)
self.doc.add_paragraph()
date_para = self.doc.add_paragraph()
date_para.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = date_para.add_run(f"日期:{self.current_date}")
run.font.size = Pt(14)
self.doc.add_page_break()
def add_section(self, title, content):
"""添加章节"""
self.doc.add_heading(title, level=1)
p = self.doc.add_paragraph(content)
p.style = self.doc.styles['Normal']
def add_table(self, headers, data):
"""添加表格"""
table = self.doc.add_table(rows=len(data)+1, cols=len(headers))
table.style = 'Medium Shading 1 Accent 1'
# 表头
for i, header in enumerate(headers):
cell = table.cell(0, i)
cell.text = header
for paragraph in cell.paragraphs:
paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
for run in paragraph.runs:
run.bold = True
# 数据
for i, row in enumerate(data, 1):
for j, value in enumerate(row):
table.cell(i, j).text = str(value)
self.doc.add_paragraph() # 添加空行
def generate_report(self, filename):
"""生成报告"""
self.create_cover_page()
# 目录
self.doc.add_heading('目录', level=0)
self.doc.add_paragraph('1. 执行摘要')
self.doc.add_paragraph('2. 详细分析')
self.doc.add_paragraph('3. 数据表格')
self.doc.add_paragraph('4. 结论与建议')
self.doc.add_page_break()
# 内容
self.add_section('执行摘要',
'本报告详细分析了项目的最新进展和关键指标。')
self.add_section('详细分析',
'经过详细的调研和分析,我们得出了以下重要发现:\n'
'1. 项目进展顺利\n'
'2. 各项指标均在预期范围内\n'
'3. 需要关注的重点领域')
# 添加表格
self.doc.add_heading('数据表格', level=1)
headers = ['指标', 'Q1', 'Q2', 'Q3', 'Q4']
data = [
['销售额', '100万', '120万', '150万', '180万'],
['利润', '20万', '25万', '30万', '35万'],
['增长率', '10%', '20%', '25%', '20%'],
]
self.add_table(headers, data)
self.add_section('结论与建议',
'基于以上分析,我们建议继续推进现有策略,'
'同时关注市场变化,及时调整方案。')
self.doc.save(filename)
print(f"报告 {filename} 已生成!")
# 使用报告生成器
generator = ReportGenerator('项目季度报告', '数据分析师')
generator.generate_report('完整报告.docx')
高级功能示例
from docx import Document
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
def advanced_features():
doc = Document()
# 添加超链接
def add_hyperlink(paragraph, text, url):
part = paragraph.part
r_id = part.relate_to(url, 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink', is_external=True)
hyperlink = OxmlElement('w:hyperlink')
hyperlink.set(qn('r:id'), r_id)
new_run = OxmlElement('w:r')
rPr = OxmlElement('w:rPr')
new_run.append(rPr)
new_run.text = text
hyperlink.append(new_run)
paragraph._p.append(hyperlink)
return hyperlink
# 使用超链接
p = doc.add_paragraph('访问 ')
add_hyperlink(p, 'Python官网', 'https://www.python.org')
p.add_run(' 了解更多信息')
# 添加分栏
section = doc.sections[0]
sectPr = section._sectPr
cols = OxmlElement('w:cols')
cols.set(qn('w:num'), '2')
cols.set(qn('w:space'), '425')
sectPr.append(cols)
# 添加文本到两栏
doc.add_paragraph('这是第一栏的内容...')
doc.add_paragraph('这是第二栏的内容...')
doc.save('高级功能文档.docx')
print("高级功能文档已生成!")
advanced_features()
使用示例
# 一键运行所有案例
if __name__ == "__main__":
print("开始生成各种Word文档...")
create_basic_document()
create_table_document()
create_image_document()
create_professional_document()
generator = ReportGenerator('项目季度报告', '数据分析师')
generator.generate_report('完整报告.docx')
advanced_features()
print("\n所有文档生成完成!")
这些案例涵盖了Python生成Word文档的常见需求,您可以根据实际需求进行修改和组合,记得先安装python-docx库哦!