python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python自动化创建Word

Python借助第三方库高效实现自动化创建Word文档

作者:站大爷IP

​在数字化办公场景中,Word 文档是信息传递与存档的核心载体,而借助 Python 的自动化能力,我们可以将文档创建过程转化为代码逻辑,实现高效、精准的文档生成,下面我们就来看看具体教程吧

​在数字化办公场景中,Word 文档是信息传递与存档的核心载体。无论是撰写报告、制作合同还是整理项目文档,传统的手动编辑方式往往需要反复调整格式、插入内容,效率低下且容易出错。而借助 Python 的自动化能力,我们可以将文档创建过程转化为代码逻辑,实现高效、精准的文档生成。本文将通过实际案例,展示如何用 Python 替代手动操作,让 Word 文档生成变得像写代码一样简单。

一、传统文档编辑的痛点:为什么需要自动化

(一)重复劳动的“时间黑洞”

以一份季度销售报告为例,手动编辑时需要完成以下操作:

即使熟练操作者,完成一份 10 页的文档也需要 30 分钟以上,且每次更新数据都需要重复全部操作。

(二)格式不一致的“隐形风险”

手动调整格式时,容易因疏忽导致:

这些问题在多人协作时尤为突出,可能导致文档专业度下降。

(三)数据更新的“动态挑战”

当销售数据每月更新时,手动编辑需要:

任何一步遗漏都可能导致数据与图表不同步,而自动化方案可以一键完成全部更新。

二、Python 自动化方案的核心工具

(一)python-docx:Word 文档的“乐高积木”

python-docx 是专门用于操作 Word 文档的库,其设计理念类似于“搭积木”:

(二)openpyxl:Excel 数据的“桥梁”

当文档需要包含 Excel 数据时,openpyxl 可实现:

(三)matplotlib:图表的“自动化画笔”

结合 matplotlib 可自动生成:

生成的图表可直接插入 Word,无需手动截图。

三、实战案例:自动化生成销售报告

(一)环境准备

安装所需库:

pip install python-docx openpyxl matplotlib

(二)数据准备

假设 Excel 文件 sales_data.xlsx 包含以下结构:

产品1月销量2月销量3月销量
产品A120150180
产品B90110130

(三)代码实现

1. 创建文档框架

from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH

# 创建文档对象
doc = Document()

# 添加标题
title = doc.add_paragraph()
title_run = title.add_run("2023年第一季度销售报告")
title_run.font.name = "黑体"
title_run.font.size = Pt(22)
title_run.font.bold = True
title.alignment = WD_ALIGN_PARAGRAPH.CENTER

# 添加日期
date_para = doc.add_paragraph("生成日期:2023-04-01")
date_para.alignment = WD_ALIGN_PARAGRAPH.RIGHT

2. 插入动态表格

from openpyxl import load_workbook

# 读取Excel数据
wb = load_workbook("sales_data.xlsx")
sheet = wb.active
data = []
for row in sheet.iter_rows(values_only=True):
    data.append(row)

# 创建表格(行数=数据行数,列数=数据列数)
table = doc.add_table(rows=len(data), cols=len(data[0]))
table.style = "Table Grid"  # 应用带边框的样式

# 填充表格
for i, row in enumerate(data):
    for j, cell in enumerate(row):
        table.cell(i, j).text = str(cell) if cell is not None else ""

# 调整列宽(示例:第一列宽度为2厘米)
for cell in table.columns[0].cells:
    cell.width = Pt(400)  # 1厘米≈28.35Pt,400Pt≈14.1mm,此处调整为更合适的值如Pt(200)

3. 插入自动化图表

import matplotlib.pyplot as plt
import numpy as np

# 提取数据(示例:产品A的三个月销量)
products = [row[0] for row in data[1:]]  # 跳过标题行
jan_sales = [row[1] for row in data[1:]]
feb_sales = [row[2] for row in data[1:]]
mar_sales = [row[3] for row in data[1:]]

# 创建折线图
plt.figure(figsize=(8, 5))
x = np.arange(len(products))
plt.plot(x, jan_sales, label="1月", marker="o")
plt.plot(x, feb_sales, label="2月", marker="s")
plt.plot(x, mar_sales, label="3月", marker="^")
plt.xticks(x, products)
plt.xlabel("产品")
plt.ylabel("销量(件)")
plt.title("第一季度销售趋势")
plt.legend()
plt.grid(True)

# 保存图表为图片
chart_path = "sales_chart.png"
plt.savefig(chart_path, dpi=300, bbox_inches="tight")
plt.close()

# 插入图片到Word
from docx.shared import Inches
doc.add_picture(chart_path, width=Inches(6))

4. 保存文档

doc.save("sales_report.docx")

(四)效果对比

操作项手动编辑时间自动化时间
创建文档框架5分钟0.1秒
填充表格数据8分钟0.5秒
生成并插入图表7分钟2秒
总计20分钟2.6秒

自动化方案不仅速度提升数百倍,且数据更新时只需修改 Excel 文件并重新运行脚本,无需手动调整格式。

四、进阶技巧:提升文档质量

(一)样式复用:统一文档风格

from docx.shared import RGBColor

# 定义标题样式
style = doc.styles["Normal"]
font = style.font
font.name = "宋体"
font.size = Pt(12)

# 自定义段落样式
custom_style = doc.styles.add_style("Highlight", 1)  # 1表示段落样式
custom_style.font.color.rgb = RGBColor(255, 0, 0)  # 红色
custom_style.font.bold = True

# 应用样式
para = doc.add_paragraph("重要提示:", style="Highlight")

(二)模板化生成:复用文档结构

手动创建 template.docx,设置好标题、页眉页脚等固定内容。

用代码填充动态部分:

from docx import Document

# 加载模板
doc = Document("template.docx")

# 在模板的指定位置插入内容(需提前在模板中插入占位符,如"{{data}}")
for para in doc.paragraphs:
    if "{{data}}" in para.text:
        para.text = para.text.replace("{{data}}", "动态生成的内容")

(三)多格式导出:满足不同需求

结合 pdfkit 或 reportlab,可将 Word 转换为 PDF:

import pdfkit

# 将Word转换为HTML(需先安装pandoc)
doc.save("temp.docx")
os.system("pandoc temp.docx -o temp.html")

# HTML转PDF
pdfkit.from_file("temp.html", "output.pdf")

五、常见问题解决方案

(一)中文字体显示异常

问题:生成的文档中中文显示为方框。

解决:指定中文字体并确保系统已安装:

from docx.oxml.ns import qn
from docx.shared import Pt


run = doc.add_paragraph().add_run("中文测试")
run.font.name = "宋体"
run._element.rPr.rFonts.set(qn("w:eastAsia"), "宋体") # 关键设置
run.font.size = Pt(12)

(二)表格跨页断裂

问题:长表格在页尾被截断,续表在下一页。

解决:设置表格属性允许跨页断行:

table = doc.add_table(...)
tbl = table._tbl
tblPr = tbl.get_or_add_tblPr()
tblLayout = tblPr.get_or_add_tblLayout()
tblLayout.type = "fixed" # 固定布局
tblW = tblPr.get_or_add_tblW()
tblW.w = "5000" # 表格宽度(单位:缇,1厘米≈567缇)
tblW.type = "dxa"
# 允许跨页断行需通过Word的"表格属性"设置,代码中可通过以下方式模拟
# 实际需手动在Word中设置或使用更复杂的XML操作

(注:完全通过代码控制跨页断行较复杂,建议生成后手动调整或接受默认行为)

(三)图表清晰度不足

问题:插入的图表模糊。

解决:提高图表 DPI 并调整尺寸:

plt.figure(figsize=(10, 6), dpi=300) # 增大尺寸和DPI
# ...生成图表代码...
plt.savefig("chart.png", dpi=300, bbox_inches="tight", transparent=True)

六、总结:自动化文档生成的未来

Python 自动化文档生成不仅提升了效率,更带来了以下变革:

从手动编辑到代码生成,我们并非要完全取代人工,而是让机器处理重复性工作,让人专注于内容创作与逻辑设计。无论是销售报告、合同模板还是技术文档,Python 都能成为你办公桌上的“文档工程师”。

下一步建议

自动化办公的未来,正从这一行行简洁的代码开始。

​到此这篇关于Python借助第三方库高效实现自动化创建Word文档的文章就介绍到这了,更多相关Python自动化创建Word内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文