[英]Python Docx Carriage Return
Python Docx
是一個非常好的庫,用於為不直接處理所有COM內容的東西生成Microsoft Word文檔。 盡管如此,我遇到了一些限制。
我想要一個段落有多行,而它們之間沒有額外的空格。 但是,寫出一個用通常的\\n
分隔行的字符串是行不通的。 也沒有使用

或
。 還有其他任何想法,或者這個框架對於類似的東西來說太有限了?
我不確定這是否可行。 看起來Word實際上是在處理輸入鍵的按鍵(我將此操作視為一種程序化的等效“\\ r \\ n”和“\\ n”)作為新段落的創建。
如果我在Word中錄制一個包含以下內容的宏:
我得到VBA:
Selection.TypeText Text:="One"
Selection.TypeParagraph
如果我創建一個看起來像這樣的Word文檔(在每個單詞后按Enter鍵):
One
Two
Three
該文檔的正文在documents.xml
文件中如下所示:
<w:body>
<w:p w:rsidR="00BE37B0" w:rsidRDefault="00CF2350">
<w:r>
<w:t>One</w:t>
</w:r>
</w:p>
<w:p w:rsidR="00CF2350" w:rsidRDefault="00CF2350">
<w:r>
<w:t>Two</w:t>
</w:r>
</w:p>
<w:p w:rsidR="00CF2350" w:rsidRDefault="00CF2350">
<w:r>
<w:t>Three</w:t>
</w:r>
</w:p>
<w:sectPr w:rsidR="00CF2350" w:rsidSect="001077CC">
<w:pgSz w:w="11906" w:h="16838"/>
<w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="708" w:footer="708" w:gutter="0"/>
<w:cols w:space="708"/>
<w:docGrid w:linePitch="360"/>
</w:sectPr>
</w:body>
從MSDN我們可以看到<w:p>
元素代表一個段落。
我認為解決這個問題的方法是遵循Python Docx中的示例:
body.append(paragraph("Hi."))
body.append(paragraph("My name is Alice."))
body.append(paragraph("Let's code"))
要么:
for paragraph_text in "Hi. \nMy name is Alice.\n Let's code".split("\n"):
body.append(paragraph(paragraph_text.strip()))
編輯:
再看一下,如果你在Word中按Shift + Enter,它會通過附加Chr(11)
添加一個手動換行符(不是一個段落Chr(11)
。 在Open XML中,這轉換為Break 。
查看Python Docx的docx.py
文件,這樣的事情可能是要走的路(免責聲明:未經測試):
for text in "Hi. \nMy name is Alice.\n Let's code".split("\n"):
run = makeelement('r')
run.append(makeelement('t', tagtext=text))
run.append(makeelement('br'))
body.append(run)
您可以通過在運行時調用add_break()
來使用python-docx實現回車。 例如:
doc = Document()
p = doc.add_paragraph()
run = p.add_run()
run.add_break()
從v0.7.2開始,python-docx將字符串中的'\\ n'和'\\ r'字符轉換為<w:br/>
元素,這些元素提供了您描述的行為。 它還將'\\ t'字符轉換為<w:tab/>
元素。
此行為適用於提供給以下內容的字符串:
Document.add_paragraph()
Paragraph.add_run()
以及分配給的字符串:
Paragraph.text
Run.text
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.