docx中的add_paragraph()添加换行符

时间:2017-03-22 21:54:19

标签: python docx python-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')

获取以下内容:

所有者:名称

问题是我在我想要的文本之前得到一个新行。

3 个答案:

答案 0 :(得分: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()

答案 1 :(得分: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'

答案 2 :(得分:0)

这对我有用:)

import docx

doc = docx.Document()
paragraph = doc.add_paragraph('Lorem ipsum ')
run = paragraph.add_run('dolor')
run.bold = True
paragraph.add_run(' sit amet.')
doc.save('test.docx')

O / P:

Lorem ipsum 美元坐下来。