我创建了一个包含文本的word文档
你好。你欠我${债务}。请尽快还我。
在时代新罗马大小 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")
这将生成一个具有所需文本的新文档,但字体大小为 11。我希望字体像原来的一样:Times New Roman size 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")
文档中的此页面应该可以帮助您了解为什么样式不起作用。这是一个非常简单的解决方法:http://python-docx.readthedocs.org/en/latest/user/styles.html
不过,我喜欢您发现的其他几件事:
-
使用 str.format(( 方法进行占位符替换是执行轻量级文本替换的一种很好的简单方法。我必须将其添加到文档中,作为简单的自定义文档生成的一种方法。
-
在段落的 XML 中,有一个名为
<w:defRPr>
的可选元素,Word 使用该元素指示添加到段落的任何新文本的默认格式,例如,在将插入点放在段落末尾后开始键入。现在,python-docx
忽略了这个元素。这就是为什么你会得到默认的Calibri 11,而不是你开始使用的Times New Roman 12。但一个有用的功能可能是使用该元素(如果存在(将运行属性分配给在段落末尾添加的任何新运行。如果您想将其作为功能请求添加到 GitHub 跟踪器中,我们将看看如何实现它。