如何使用 python 保留格式将代码写入 MS Word?

How to write code to MS Word using python retaining the formatting?

我想创建一个 MS word 文档来编译我现有的很多代码(在 MATLAB 和 Python 中)。我正在使用 python-docx.

编写它

如果我这样做:

file = open('task1.m', 'r')
document.add_paragraph(file)

然后代码以没有格式的简单文本格式用 MS word 编写。

有什么方法可以在保留编程语言格式的同时编写代码? (保持颜色不变)

.m 文件不包含颜色信息。这是由您使用的 IDE / 编辑器添加的。

如果您知道(或可以找到)如何将 html-formatted 或 rtf-formatted 文本插入到您的 Word 文档中,请查看 pygments 模块。

我不确定如何将此 rtf-formatted 文本写入 word 文档。但是,如果你把它写成一个RTF文档,这个可以用Word打开和保存。

假设我 运行 这个代码 toword.py:

from docx import Document

from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import RtfFormatter

with open("toword.py", "r") as f:
    code = f.read()
    
ht = highlight(code, PythonLexer(), RtfFormatter())

with open("rtffile.rtf", "w") as wf:
    wf.write(ht)
    
doc = Document()
paragraph = doc.add_paragraph(ht)
doc.save("code.docx")

还有一个 pygments.lexers.matlab.MatlabLexer 格式的 Matlab 文件。或者您可以使用 pygments.lexers.get_lexer_for_filename(filename) 从文件名中获取词法分析器。

正在 Word 中打开 rtffile.rtf

正在 Word 中打开 code.docx


或者,您可以使用 pandoc module along with its backend。如果你提供一些markdown,它可以转换为docx格式,如果markdown包含代码围栏,它可以自动突出显示。

因此使用此代码:

# from docx import Document

from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter

import pandoc

with open("toword.py", "r") as f:
    code = f.read()

md = f"`````python\n{code}\n`````";
doc = pandoc.Document()
doc.markdown = bytearray(md, encoding="utf-8")
doc.add_argument("out=code.docx")
doc.docx

我们得到以下 code.docx:

您可以使用 --highlight-style=... 参数来调整突出显示样式。更多信息 here

为了实现这一点,NotePad++ 提供了一个功能,可以为您的语言打开语法高亮显示。然后,select 代码,右键单击并 select“插件命令 > 使用语法突出显示复制文本”。 现在,您可以将其粘贴到 Word 中,并且颜色保持不变。