Python生成word案例实现?

wen python案例 6

本文目录导读:

  1. 环境准备
  2. 案例1:基础文档生成
  3. 案例2:添加表格
  4. 案例3:插入图片和样式
  5. 案例4:页眉页脚与页面设置
  6. 案例5:完整报告生成器
  7. 高级功能示例
  8. 使用示例

我来为您提供几个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库哦!

标签: Python Word

抱歉,评论功能暂时关闭!