我无法使用Python-docx更改Word文档中的文本样式

时间:2014-12-12 19:01:56

标签: python docx python-docx

我创建了一个包含文本

的word文档
  

您好。你欠我{欠}。请尽快给我回报。

以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 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")

1 个答案:

答案 0 :(得分:-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跟踪器,我们将看看如何实现它。