2016-06-28 98 views
1

比方说,我有我的某些文本格式DOCX文档中的某些段落,例如:
“富酒吧
我想使其像本段的模板一样将其复制到同一文档中多次。
复制示例中的文本意味着丢失文本格式。
复制一个段落到同一文件(蟒蛇3.x中,DOCX)

 
from docx import Document 

document = Document('input.docx') 
template = document.paragraphs[0] 
for x in range(100): 
    document.add_paragraph(template.text) 
document.save('output.docx')

是否有任何通用的方法来做到这一点与python-docx库?
特别感谢python和django的其他解决方案!
在此先感谢。

+0

你的问题有点太抽象,不能提供有用的答案。一般来说,你需要进入下一级(在段落内部运行),因为这是字符格式化的地方。如果你能让你的特定目标更具体一点,那么可能会有更好的答案。我将在这些附带条件下采取一些措施。 – scanny

回答

0

在您简单的例子,你可以做这样的事情:

def clone_run_props(tmpl_run, this_run): 
    this_run.bold = tmpl_run.bold 
    ... maybe other possible run properties ... 

template_paragraph = ... however you get this ... 
new_paragraph = document.add_paragraph() 
for run in template_paragraph: 
    cloned_run = new_paragraph.add_run() 
    clone_run_props(run, cloned_run) 
    cloned_run.text = ... however you get this ... 

这种方法将工作时的字符格式是直接应用,而不是在它的间接应用,例如通过字符样式。

+0

我正在寻找一个更通用的解决方案,当用户上传docx模板时(我甚至不必知道它是什么模板),并因此接收到一定数量的填充了不同模板的文档来自数据库的信息(如姓名,姓氏等)。填写单个文档的工作非常快,但我正在寻找queryset的解决方案:)感谢您的回应! – Insolence357

+0

我需要看一个例子。有很多你没有提到的细节,比如你如何知道在哪里放置什么以及“模板”文档需要遵守哪些限制。如果您正在寻找一般的文档模板,比如在文本中放置替代字符串(如{{name}},然后进行替换,那么您正在讨论一个不同的(并且颇具挑战性的)问题。您可以通过搜索'python-docx模板替换'来找到更多信息。 – scanny

+0

这正是我所说的,谢谢你的建议 - 我会尽力去寻找它。但到目前为止,问题不在于替换,正则表达式对于简单替换非常有用,我只是无法将查询集中多个对象的内容相乘。 – Insolence357