目的: 我使用一个单词模板,我想从python传递段落值。
管道: 管道涉及使用python-docx并将输出段发送到python docx;因此,创建一个docx文件。
from docx import Document
from docx.shared import Inches
document = Document()
document.add_heading('Document Title', 0)
r = """sample paragraph"""
p = document.add_paragraph(r)
document.add_page_break()
document.save('Test.docx')
问题:
我已经有了一个我想要使用的示例模板,是否可以使用python-docx创建模板的蓝图并继续内容阻止?
通过蓝图,我的意思是节标题,页脚,边距,间距等等,必须自动保存或编码为python-docx格式。这样我就可以将样本段落发送到相关部分。
如果我需要使用另一个模板作为基础创建模板;我相信,我需要在python-docx中再次对段,边距和样式进行硬编码。有没有办法绕过这条工作路径?
答案 0 :(得分:1)
我认为您认为最有用的方法是在模板文档中定义段落样式,其中包含您想要的不同类型段落的段落和字符格式(标题,正文段落,等),然后在添加时为每个段落应用正确的样式。
http://python-docx.readthedocs.io/en/latest/user/styles-understanding.html
http://python-docx.readthedocs.io/en/latest/user/styles-using.html
您仍然需要将文档从“顶部”写入“底部”。如果项目没有按顺序到达,您可能希望将它们组织在一个内存数据结构中,直到您拥有它们,然后从该数据结构中写入文档。
有很多方法,但是在python-docx中还没有“游标”的概念,你可以在任意位置插入一个段落。
答案 1 :(得分:1)
我一直在为此使用占位符(即,在其中放置“ [Counterparty]”之类的东西),然后像这样搜索和替换:
from docx import Document
document = Document(('./templates/yourfilename.docx'))
for paragraph in document.paragraphs:
if "[Counterparty]" in paragraph.text:
paragraph.text = re.sub("[Counterparty]", "Replacing text", paragraph.text)