2015-06-23 4 views
3

Я хотел бы открыть существующий документ слов, где я уже добавил номера страниц и просто добавляю в него текст и заголовок.добавить контент в существующий docx с помощью python-docx

Вот простой пример того, как я пытался достичь моей цели

#!/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 справки о но, кажется, я что-то не хватает - кто-нибудь есть идея?

Заранее спасибо

ответ

3

python-docx может работать только со стилями, которые уже определены в документе. Эта ошибка указывает, что стиль абзаца заголовка 1 не определен. Word начинается без определенных стилей (нормально, пара вроде Normal, но это все), затем добавляет встроенные стили к файлу при первом использовании.

два варианта:

  1. Добавить пункт рубрикой 1 к документу вручную, а затем удалить его. После этого в документе будет определен стиль абзаца заголовка 1. Когда Word добавит стиль, он не удалит его, даже если все абзацы, использующие этот стиль, будут удалены.

  2. Используйте python-docx для определения заголовка 1 самостоятельно. Смотрите документацию здесь о том, как сделать это: http://python-docx.readthedocs.org/en/latest/user/styles-using.html#define-paragraph-formatting

Эта страница, вероятно, также стоит быстро читать, чтобы заполнить некоторые концепции стиля: http://python-docx.readthedocs.org/en/latest/user/styles-understanding.html

+0

Великий - это именно вопрос. Теперь он работает, когда я определяю все стили вручную. Но возможно ли загрузить этот стиль со свойствами по умолчанию? Вот что я сделал, но стили только "простые" пункты: 'стили = document.styles' ' styles.add_style ('Heading 1', WD_STYLE_TYPE.PARAGRAPH, встроенные = True) ' Я надеюсь, что флаг 'builtin' исправит это. – mat1010

+0

№ Нет встроенных настроек встроенных стилей. Вам нужно будет выяснить, какие свойства необходимы каждому из них, и применять их самостоятельно. Вы можете использовать opc-diag для просмотра части styles.xml в пакете .docx, где они определены, чтобы узнать, какие настройки необходимы. Встроенные стили варьируются в зависимости от стандартных тем, версий Word и т. Д., Поэтому нет универсального набора. Заголовки довольно простые; возможно, три или четыре настройки, такие как размер шрифта, пробел перед и на основе. Я бы попробовал это, если вы не можете определить исходный документ. – scanny

+0

Большое спасибо за вашу помощь. Я буду работать над выяснением свойств этих стилей по умолчанию и применять их самостоятельно. – mat1010

Смежные вопросы