【问题标题】:Copy a paragraph into the same document(python 3.x, docx)将一段复制到同一个文档中(python 3.x,docx)
【发布时间】:2016-10-30 20:44:09
【问题描述】:

假设我的 docx 文档中有某个段落具有某种文本格式,例如:
"Foo 酒吧"
我想制作类似本段模板的内容,以便多次将其复制到同一个文档中。
复制示例中的文本意味着丢失文本格式。

从 docx 导入文档 文档 = 文档('input.docx') 模板 = document.paragraphs[0] 对于范围内的 x(100): document.add_paragraph(template.text) document.save('output.docx')

python-docx 库有什么通用的方法吗?
python 和 django 的其他解决方案也特别受欢迎!
提前致谢。

【问题讨论】:

  • 您的问题有点过于抽象,无法提供有用的答案。通常,您需要进入下一个级别(在段落内运行),因为那是字符格式所在的位置。如果您可以使您的特定目标更加具体,那么可能会有更好的答案。我将在下面讨论这些附带条件。

标签: python docx python-docx


【解决方案1】:

在您的简单示例中,您可以执行以下操作:

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 ...

这种方法在直接应用字符格式时有效,但在间接应用时无效,例如通过字符样式。

【讨论】:

  • 我正在寻找一个更通用的解决方案,就像用户上传 docx 模板(我什至不必知道它是什么模板)并因此收到具有特定这些模板的数量填充了来自数据库的不同信息(例如姓名、姓氏等)。填写单个文档效果很好,速度很快,但我正在寻找查询集的解决方案:) 感谢您的回复!
  • 我需要看一个例子。您没有提到很多细节,例如您如何知道在哪里放置什么以及“模板”文档需要遵守哪些限制。如果您正在寻找通用文档模板,例如在文本中放入 {{name}} 之类的替换字符串然后进行替换,那么您正在谈论一个不同的(并且非常具有挑战性的)问题。您可以通过搜索“python-docx 模板替换”找到更多相关信息。
  • 这正是我所说的,感谢您的建议 - 我会尝试寻找它。但到目前为止,问题不在于替换,正则表达式对于简单的替换效果很好,我只是未能为查询集中的多个对象乘以内容。
猜你喜欢
  • 2021-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 2014-09-22
相关资源
最近更新 更多