2017-03-22 101 views
0

我使用下面的代碼:add_paragraph()的DOCX增加換行符

def header_build(self, boldText, dataText): 
    # document.add_heading('Document Title', 0) 
    p = self.document.add_paragraph() 
    p.style = self.document.styles['Body Text'] 
    p.style.font.size = Pt(12) 
    p.style.font.name = 'Times New Roman' 
    p.add_run(boldText).bold = True 
    p.add_run(dataText) 

的想法是有以下當我使用header_build功能:

header_build(self, boldText='Owner: ', dataText='Name') 

得到如下:

業主:名稱

的概率lem是,我正在嘗試獲取文本之前得到一個新行。

+0

可能你明確你在哪裏得到額外的行?你的意思是在文件中? –

+0

是的,它會導致在所有者行之前有多餘的空行(新行):Name – Omar

回答

2

問題:

我認爲這是因爲您要添加到現有文檔(即空的),您手動創建(不使用python-DOCX)。看起來好像在創建文檔時創建了paragraphs[0],因此當您使用add_paragraph()添加新段落時,它將創建另一段paragraphs[1],從而使第一段爲空。

解決方案:

有解決方案:

要麼你插入文字段落[0],而不是創建一個新的段落:

def header_build(self, boldText, dataText): 

    # paragraph[0] 
    p= self.document.paragraphs[0] 

    p.style = document.styles['Body Text'] 
    p.style.font.size = Pt(12) 
    p.style.font.name = 'Times New Roman' 
    p.add_run(boldText).bold = True 
    p.add_run(dataText) 
    print p.text 

或者你可以使用python-DOCX創建一個新文檔,然後使用add_paragraph(),這將是paragraphs[0](不改變header_build功能):

# create a new document 
document = Document() 
0

Mimx是完全正確的。用Document()創建的新文檔包含單個空白段落。

此行爲由Word支配。當您打開一個新的Word文件時,如果(可見)上有段落標記,則會在單個段落標記之前看到插入點。這反映在Word的ISO/IEC 29500規範中,文檔(w:body元素)必須包含1個或更多段纔有效。不幸的是,這意味着您需要處理新文檔的第一段與之後添加的不同。

from docx import Document 

document = Document() 
document._body.clear_content() 

如果此調用後保存,不添加任何內容,.docx文件將是無效的,不得:

如果你願意,你可以開始添加內容就像在此之前刪除第一段加載或可能需要「修復」步驟。但只要你添加內容,這將工作得很好,並且有一個優點,即添加段落是統一的,即添加第一段的方式與添加後段相同。

否則,你需要得到第一段和它從其餘部分分開操作:

paragraph = document.paragraphs[0] 
paragraph.text = 'foobar' 
paragraph.style = 'Heading 1' 
etc. 

for text in content_blocks: 
    paragraph = document.add_paragraph() 
    paragraph.text = text 
    paragraph.style = 'Body Text'