Python: создайте «Оглавление» с помощью python-docx / lxml

Я пытаюсь автоматизировать создание файлов .docx (WordML) с помощью python-docx ( https://github.com/mikemaccana/python-docx ). Мой текущий скрипт создает ToC вручную со следующим циклом:

for chapter in myChapters: body.append(paragraph(chapter.text, style='ListNumber')) 

Кто-нибудь знает, как использовать «встроенную в слово» ToC-функцию, которая автоматически добавляет индекс, а также создает абзацы-ссылки к отдельным главам?

Большое спасибо!

One Solution collect form web for “Python: создайте «Оглавление» с помощью python-docx / lxml”

Основная проблема заключается в том, что обработанный ToC зависит от разбиения на страницы, чтобы узнать, какой номер страницы нужно разместить для каждого заголовка. Pagination – это функция, предоставляемая механизмом компоновки, очень сложная часть программного обеспечения, встроенная в клиент Word. Написание механизма компоновки страниц в Python, вероятно, не очень хорошая идея, определенно не проект, который я планирую предпринять в ближайшее время 🙂

ToC состоит из двух частей:

  1. элемент, который указывает местонахождение ToC, и такие вещи, как уровни заголовков.
  2. фактический видимый контент ToC, заголовки и номера страниц с пунктирными линиями, соединяющими их.

Создание элемента довольно просто и относительно мало. Создание фактического видимого содержимого, по крайней мере, если вам нужны номера страниц, требуется механизм компоновки Word.

Это варианты:

  1. Просто добавьте тег и несколько других битов, чтобы сообщить, что Word ToC необходимо обновить. Когда документ открывается первым, появляется диалоговое окно, в котором ссылки должны быть обновлены. Пользователь нажимает «Да», а Боб – твой дядя. Если пользователь нажимает «Нет», заголовок ToC появляется без содержимого ниже него, а ToC может обновляться вручную.

  2. Добавьте тег, а затем запустите клиент Word с помощью C # или Visual Basic в библиотеке Word Automation, чтобы открыть и сохранить файл; все поля (включая поле ToC) обновляются.

  3. Сделайте то же самое на стороне сервера, если у вас есть экземпляр SharePoint или что-то еще, что можно сделать с помощью служб Word Automation.

  4. Создайте макрос AutoOpen в документе, который автоматически запускает обновление поля при открытии документа. Вероятно, не пройдет много вирусных шашек и не будет работать на заблокированных сборках Windows, распространенных в корпоративных настройках.

Вот очень хороший набор скринкастов Эрика Уайта, который объясняет все волосатые детали

Python - лучший язык программирования в мире.