使用python-docx将内容添加到现有docx

时间:2015-06-23 21:01:23

标签: python python-docx

我想打开一个已经添加了页码的现有word文档,只需添加一些文字和标题即可。

这是我尝试实现目标的一个基本示例

#!/usr/bin/env python 
from docx import Document
document = Document('report-template.docx')
document.add_heading('Headline No. 1', level=1)
document.add_paragraph('Test No. 1')
document.add_heading('Heading No. 2', level=2)
document.add_paragraph('Test No. 2')
document.save('example.docx')

当我使用完整的新文档执行上述操作时,一切正常 - 当使用现有文件执行此操作时,它会失败,并显示以下错误

Traceback (most recent call last):
  File "create-report-test.py", line 6, in <module>
    document.add_heading('Headline No. 1', level=1)
  File "/usr/lib/python2.7/site-packages/docx/document.py", line 43, in add_heading
    return self.add_paragraph(text, style)
  File "/usr/lib/python2.7/site-packages/docx/document.py", line 63, in add_paragraph
    return self._body.add_paragraph(text, style)
  File "/usr/lib/python2.7/site-packages/docx/blkcntnr.py", line 38, in add_paragraph
    paragraph.style = style
  File "/usr/lib/python2.7/site-packages/docx/text/paragraph.py", line 111, in style
    style_or_name, WD_STYLE_TYPE.PARAGRAPH
  File "/usr/lib/python2.7/site-packages/docx/parts/document.py", line 75, in get_style_id
    return self.styles.get_style_id(style_or_name, style_type)
  File "/usr/lib/python2.7/site-packages/docx/styles/styles.py", line 113, in get_style_id
    return self._get_style_id_from_name(style_or_name, style_type)
  File "/usr/lib/python2.7/site-packages/docx/styles/styles.py", line 143, in _get_style_id_from_name
    return self._get_style_id_from_style(self[style_name], style_type)
  File "/usr/lib/python2.7/site-packages/docx/styles/styles.py", line 57, in __getitem__
    raise KeyError("no style with name '%s'" % key)
KeyError: u"no style with name 'Heading 1'"

我阅读http://python-docx.readthedocs.org/en/latest/user/documents.html下的文件,但似乎我错过了一些东西 - 有人有个主意吗?

提前致谢

1 个答案:

答案 0 :(得分:4)

python-docx只能用于文档中已定义的样式。此错误表示未定义标题1段落样式。 Word开始时没有定义任何样式(好吧,像普通的那样,但都是这样),然后它在第一次使用时为文件添加了内置样式。

两个选项:

  1. 手动将标题1段添加到文档中,然后将其删除。之后,标题1段落样式将在文档中定义。一旦Word添加了一个样式,它就不会删除它,即使删除了使用该样式的所有段落。

  2. 使用python-docx自己定义标题1。请参阅此处的文档:http://python-docx.readthedocs.org/en/latest/user/styles-using.html#define-paragraph-formatting

  3. 这个页面可能也值得快速阅读以填写一些样式概念: http://python-docx.readthedocs.org/en/latest/user/styles-understanding.html