2013-01-14 54 views
6

Python Docx是一個相當不錯的庫,用於爲不直接處理所有COM內容的東西生成Microsoft Word文檔 - 但是,我遇到了一些限制。有沒有人有任何想法如何將一個文本字符串中回車?我想要一個段落有多行而沒有額外的空間。但是,寫出一個字符串與通常的'\ n'分隔的行不起作用。也不使用&#10或&#13。還有其他想法,還是這個框架對於類似的東西來說太有限了?Python Docx回車

回答

6

我不確定這是否可能。它看起來好像Word實際上是在處理輸入鍵的按下(我把這個操作當作一種程序化的等同於「\ r \ n」和「\ n」的操作)來創建一個新的段落。


如果我在Word中錄製一個宏,包括:

  1. 鍵入文字 「一」
  2. 按enter鍵

我得到的VBA:

Selection.TypeText Text:="One" 
Selection.TypeParagraph 

如果我創建一個看起來像這樣一個Word文檔(按壓每個字後面輸入):

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)添加手動換行符(不是段落)。在Open XML中,這轉換爲Break

望着docx.py文件的Python DOCX的,這樣的事情可能是要走的路(免責聲明:未測試):

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) 
+0

你如何創建的段落分析看起來正確,但body.append(段)不似乎是一個解決方案。這只是重現了上面用「一個」,「兩個」和「三個」段落展示的問題。我想要的是以某種方式擺脫段落之間的額外空間,可能通過某種方式使段落元素識別單個換行符。 – user1427661

+0

@ user1427661請參閱我的編輯。 –

0

由於v0.7.2的,蟒蛇,DOCX轉換 '\ n'和'\ r'字符組成<w:br/>元素,它提供了您描述的行爲。它還將'\ t'字符轉換爲<w:tab/>元素。

此行爲是可提供的字符串:

  • Document.add_paragraph()
  • Paragraph.add_run()

,並分配給字符串:

  • Paragraph.text
  • Run.text
2

您可以在運行時使用python-docx通過調用add_break()來實現回車。例如:

doc = Document() 
p = doc.add_paragraph() 
run = p.add_run() 
run.add_break() 

python-docx reference