1

我创建了一个包含文本的 word 文档

你好。你欠我 ${debt}。请尽快还给我。

在 Times New Roman 大小 12 中。文件名是 debtTemplate.docx。我想使用 python-docx 将 {debt} 替换为实际数字(1.20)。我尝试了以下代码:

from docx import Document

document = Document("debtTemplate.docx")
paragraphs = document.paragraphs

debt = "1.20"

paragraph = paragraphs[0]
text = paragraph.text
newText = text.format(debt=debt)
paragraph.clear()
paragraph.add_run(newText)

document.save("debt.docx")

这将生成一个包含所需文本的新文档,但 Calabri 字体大小为 11。我希望字体与原始字体相同:Times New Roman 大小为 12。

我知道您可以将样式变量添加到paragraph.add_run(),所以我尝试了,但没有任何效果。例如paragraph.add_run(newText,style="Strong"),甚至没有改变任何东西。

有谁知道我能做什么?

编辑:这是我的代码的修改版本,我希望它可以工作但没有。

from docx import Document

document = Document("debtTemplate.docx")
document.save("debt.docx")
paragraphs = document.paragraphs

debt = "1.20"

paragraph = paragraphs[0]
style = paragraph.style
text = paragraph.text
newText = text.format(debt=debt)
paragraph.clear()
paragraph.add_run(newText,style)
document.save("debt.docx")
4

1 回答 1

-1

文档中的这个页面应该可以帮助您理解为什么样式没有效果。这是一个非常简单的修复: http: //python-docx.readthedocs.org/en/latest/user/styles.html

我喜欢你发现的其他一些事情:

  1. 使用 str.format() 方法进行占位符替换是进行轻量级文本替换的好方法。我必须将其添加到文档中,作为一种简单的自定义文档生成方法。

  2. 在段落的 XML 中,有一个名为的可选元素<w:defRPr>,Word 使用它来指示添加到段落中的任何新文本的默认格式,例如,如果您在将插入点放在段落末尾之后开始键入。现在,python-docx忽略该元素。这就是为什么您将获得默认的 Calibri 11 而不是您开始使用的 Times New Roman 12。但是一个有用的功能可能是使用该元素(如果存在)将运行属性分配给在段落末尾添加的任何新运行。如果您想将其作为功能请求添加到 GitHub 跟踪器,我们将看看如何实现它。

于 2014-12-12T19:22:19.013 回答