簡體   English   中英

Python Docx回車

[英]Python Docx Carriage Return

Python Docx是一個非常好的庫,用於為不直接處理所有COM內容的東西生成Microsoft Word文檔。 盡管如此,我遇到了一些限制。

  • 有沒有人知道怎么會在一串文字中放回車?

我想要一個段落有多行,而它們之間沒有額外的空格。 但是,寫出一個用通常的\\n分隔行的字符串是行不通的。 也沒有使用&#10&#13 還有其他任何想法,或者這個框架對於類似的東西來說太有限了?

我不確定這是否可行。 看起來Word實際上是在處理輸入鍵的按鍵(我將此操作視為一種程序化的等效“\\ r \\ n”和“\\ n”)作為新段落的創建。


如果我在Word中錄制一個包含以下內容的宏:

  1. 輸入文字“一”
  2. 按enter鍵

我得到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()

python-docx參考

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM