
开发人员经常需要将 Python 代码添加到 Word 文档中,用于技术文档、教程、代码审查、内部报告或客户交付材料。对于少量代码片段,手动复制粘贴即可完成;但在处理较长的脚本或多个文件时,自动化方案能够提供更好的一致性、更强的格式控制能力以及更高的可扩展性。
本教程将介绍多种使用 Python 将 Python 代码导出到 Word 文档的实用方法。每种方法都有各自的优势,具体可以根据你对格式设置、自动化、语法高亮或可读性的需求进行选择。
安装所需库
在运行示例之前,请先安装必要的依赖:
pip install spire.doc pygments
库概览:
- Spire.Doc for Python — 用于以编程方式创建和操作 Word 文档
- Pygments — 用于将代码生成带语法高亮的 RTF、HTML 或图片格式
- Pathlib(内置库)— 用于从磁盘读取 Python 文件
- textwrap(内置库)— 用于在生成图片格式的代码之前对过长的代码行进行换行
将 Python 代码以纯文本形式导出到 Word
将代码以纯文本形式插入是将代码嵌入 Word 最直接的方法。它可以使脚本保持完全可编辑,同时保留缩进和换行等格式。
方法 1:将原始 Python 代码插入 Word 文档
此方法读取 .py 文件,并将代码直接插入 Word,同时应用等宽字体样式。
from pathlib import Path
from spire.doc import *
# 读取 Python 文件
code_string = Path("demo.py").read_text(encoding="utf-8")
# 创建一个 Word 文档
doc = Document()
# 添加一个节
section = doc.AddSection()
section.PageSetup.Margins.All = 60
# 添加一个段落
paragraph = section.AddParagraph()
# 将代码字符串插入段落
paragraph.AppendText(code_string)
# 创建一个段落样式
style = ParagraphStyle(doc)
style.Name = "code"
style.CharacterFormat.FontName = "Consolas"
style.CharacterFormat.FontSize = 12
style.ParagraphFormat.LineSpacing = 12
doc.Styles.Add(style)
# 将样式应用于段落
paragraph.ApplyStyle("code")
# 保存文档
doc.SaveToFile("Output.docx", FileFormat.Docx2019)
doc.Dispose()
工作原理:
此方法将 Python 代码作为纯文本处理,并将其直接插入 Word 段落中。脚本通过 Path.read_text() 读取 .py 文件,同时保留缩进、空行以及整体代码结构。
插入文本后,创建一个自定义段落样式并应用到代码段落。使用 Consolas 这样的等宽字体可确保代码对齐并提高可读性,而固定的行距则能保持各行格式一致。
由于整个过程不需要使用中间格式,因此这是最简单、最快速的方法。但是,它不提供语法高亮或语义样式——Word 仅将代码显示为格式化文本。
输出:

你可能还喜欢: 使用 Python 生成 Word 文档
方法 2:从 Markdown 包裹的代码生成 Word 文件
如果你的工作流已使用 Markdown,将 Python 代码包裹在围栏代码块中,可为将脚本转换为 Word 文档提供一种结构化的方法。
from pathlib import Path
from spire.doc import *
# 读取 Python 文件
code = Path("demo.py").read_text(encoding="utf-8")
# 转换为 Markdown
md_content = f"```python\n{code}\n```"
Path("temp.md").write_text(md_content, encoding="utf-8")
# 将 Markdown 加载到 Word 中
doc = Document()
doc.LoadFromFile("temp.md")
# 更新页面设置
doc.Sections[0].PageSetup.Margins.All = 60
# 保存为 DOCX 文件
doc.SaveToFile("Output.docx", FileFormat.Docx)
doc.Dispose()
工作原理:
与直接插入文本不同,此方法会将 Python 代码包裹在 Markdown 围栏代码块中。然后,使用 Spire.Doc 的 Markdown 解析功能将生成的 Markdown 文件加载到 Word 中。
当 Word 导入 Markdown 时,它会自动保留缩进和换行等代码格式。该方法适用于已经使用 Markdown 作为文档工作流程的场景,也适合代码需要与标题、列表以及说明性文字共存的技术文档。
由于 Markdown 本身并不会自动在 Word 中为代码应用语法颜色,因此最终结果仍然是纯代码格式。不过,在技术文档处理流程中,这种方式的结构更加清晰,也更容易管理。
输出:

将带语法高亮的 Python 代码添加到 Word
语法高亮可以让代码更易于阅读和理解。通过集成 Pygments,Python 脚本可以在嵌入 Word 之前转换为带样式的格式。
本节将探讨三种方法——RTF、HTML 和图片渲染。每种方法都有不同的优势,可以根据具体的格式需求进行选择。
方法 1:使用 RTF 创建预格式化代码块
RTF 允许语法高亮的代码在 Word 中保持完全可编辑状态。
from pathlib import Path
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import RtfFormatter
from spire.doc import *
# 读取 Python 文件
code = Path("demo.py").read_text(encoding="utf-8")
# 设置字体
formatter = RtfFormatter(fontface ="Consolas")
# 指定词法分析器
rtf_text = highlight(code, PythonLexer(), formatter)
rtf_text = rtf_text.replace(r"\f0", r"\f0\fs24") # 字体大小(24 对应 12 磅字体)
# 创建一个 Word 文档
doc = Document()
# 添加一个节
section = doc.AddSection()
section.PageSetup.Margins.All = 60
# 添加一个段落
paragraph = section.AddParagraph()
# 将语法高亮的代码作为 RTF 插入
paragraph.AppendRTF(rtf_text)
# 保存文档
doc.SaveToFile("Output.docx", FileFormat.Docx2019)
doc.Dispose()
工作原理:
Pygments 使用 **lexer(词法分析器)**分析 Python 语法,识别关键字、字符串和注释等不同类型的代码标记。RTF 格式化程序应用样式规则,使用 RTF 控制字来表示颜色和字体。
生成的 RTF 字符串通过 AppendRTF() 直接插入 Word。由于 RTF 是一种与 Word 原生兼容的格式,文档无需额外渲染步骤即可保留字体、颜色和间距。
通过修改 RTF 控制字(例如 \fs24)可以控制字体大小,从而精确调整代码的显示效果。此方法能在 Word 中生成可编辑、可选择并带有语法高亮的代码。
输出:

方法 2:通过 HTML 格式渲染高亮代码
HTML 渲染提供视觉丰富的语法高亮和自动文本换行。
from pathlib import Path
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter
from spire.doc import *
# 读取 Python 文件
code = Path("demo.py").read_text(encoding="utf-8")
# 从 Python 代码生成带有语法高亮的 HTML
html_text = highlight(code, PythonLexer(), HtmlFormatter(full=True))
# 创建一个 Word 文档
doc = Document()
# 添加一个节
section = doc.AddSection()
section.PageSetup.Margins.All = 60
# 添加一个段落
paragraph = section.AddParagraph()
# 将 HTML 字符串添加到段落
paragraph.AppendHTML(html_text)
# 保存文档
doc.SaveToFile("Output.docx", FileFormat.Docx2019)
doc.Dispose()
工作原理:
此处,Pygments 使用 HtmlFormatter 将 Python 代码转换为带样式的 HTML。HTML 输出包含表示语法颜色和格式的内联样式或 CSS 规则。
Spire.Doc 随后解析 HTML 内容,并将其渲染到 Word 中。在这一过程中,HTML 元素会被转换为 Word 的格式结构,使带语法高亮的代码在视觉效果上与网页中的代码块保持相似。
当代码来源于网页内容、静态文档网站或 Markdown 转 HTML 工作流时,这种方法尤其适用。
输出:

你可能还喜欢: 在 Python 中将 HTML 转换为 Word DOC 或 DOCX
方法 3:将带语法高亮的代码作为图片插入
在视觉一致性比可编辑性更重要的情况下,可以先将代码渲染为图片,然后再插入 Word。
from pathlib import Path
import textwrap
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import ImageFormatter
from spire.doc import *
# 读取 Python 文件
code = Path("demo.py").read_text(encoding="utf-8")
# 手动换行长行
def wrap_code_lines(code_text, max_width=75):
wrapped_lines = []
for line in code_text.splitlines():
if len(line) > max_width:
wrapped_lines.extend(textwrap.wrap(
line,
width=max_width,
replace_whitespace=False,
drop_whitespace=False
))
else:
wrapped_lines.append(line)
return "\n".join(wrapped_lines)
code = wrap_code_lines(code, max_width=75)
# 生成图片
formatter = ImageFormatter(
font_name="Consolas",
font_size=18,
scale=2,
image_pad=10,
line_pad=2,
background_color="#ffffff"
)
img_bytes = highlight(code, PythonLexer(), formatter)
with open("code.png", "wb") as f:
f.write(img_bytes)
# 创建一个 Word 文档
doc = Document()
section = doc.AddSection()
section.PageSetup.Margins.All = 60
# 插入到 Word
paragraph = section.AddParagraph()
picture = paragraph.AppendPicture("code.png")
# 确保图片适应页面宽度
page_width = (
section.PageSetup.PageSize.Width
- section.PageSetup.Margins.Left
- section.PageSetup.Margins.Right
)
picture.Width = page_width
# 保存文档
doc.SaveToFile("Output.docx", FileFormat.Docx2019)
doc.Dispose()
工作原理:
此方法将 Python 代码渲染为图片而非可编辑文本。Pygments 使用 ImageFormatter 生成带语法高亮的位图,允许对字体、颜色、内边距和 DPI 进行全面视觉控制。
由于图片渲染不会自动处理过长代码行,因此脚本会先使用 Python 的 textwrap 模块手动对较长的代码行进行换行,再生成图片。这样可以避免生成超出页面宽度的图片。
将图片插入 Word 后,会动态调整图片宽度,使其适应页面的可打印区域。由于代码以图形形式嵌入,因此可以在不同平台上保持一致的视觉效果,并避免格式不一致的问题;但文本将不再可编辑。
输出:

结论
根据具体需求,可以通过多种方式将 Python 代码转换为 Word 文档。纯文本方法简单灵活,而 RTF 和 HTML 方法可以在保留可选择文本的同时提供强大的语法高亮功能。基于图片的代码块能够提供一致的视觉格式,但需要注意代码换行和图片缩放问题。
对于大多数文档工作流程:
- 对于可编辑的技术内容,使用纯文本
- 对于带语法高亮的文档,使用 HTML 或 RTF
- 当格式一致性至关重要时,使用图片
常见问题
问题 1:哪种方法最适合教程?
HTML 或 RTF 方法提供清晰的语法高亮,同时保留文本的可选择性。
问题 2:如何保留缩进和空行?
使用 .read_text() 读取 .py 文件时,不要对代码行进行删除或修改。
问题 3:为什么基于图片的代码块会变得太小?
Word 会将图片缩放到适合页面宽度的大小。增加图片格式化程序的缩放比例或调整换行宽度可以提高可读性。
问题 4:读者可以从 Word 中复制代码吗?
可以,除非代码是以图片形式插入的。
问题 5:转换时必须使用 Markdown 吗?
不需要。Markdown 是可选的,但在使用文档处理工作流程时非常有用。
问题 6:可以将生成的 Word 文档导出为 PDF 文件吗?
可以。在保存文档时,只需要在 Document.SaveToFile() 方法中指定 PDF 作为输出格式即可。
获取免费许可证
要充分体验 Spire.Doc for Python 的功能,不受任何评估限制,你可以申请 30 天试用许可证。







