Привет.
Я пишу на python экспортер в .docx.
И на финальной стадии написания, мне осталось лишь сделать table of contents.
Я нашел как сделать ToC (table of contetns) элемент:
fldChar = OxmlElement('w:fldChar') # creates a new element
fldChar.set(qn('w:fldCharType'), 'begin') # sets attribute on element
fldChar.set(qn('w:dirty'), 'true')
instrText = OxmlElement('w:instrText')
instrText.set(qn('xml:space'), 'preserve') # sets attribute on element
instrText.text = r'TOC \o "1-3" \h \z \u' # change 1-3 depending on heading levels you need
fldChar2 = OxmlElement('w:fldChar')
fldChar2.set(qn('w:fldCharType'), 'separate')
fldChar3 = OxmlElement('w:t')
fldChar3.text = "Right-click to update field."
fldChar2.append(fldChar3)
fldChar4 = OxmlElement('w:fldChar')
fldChar4.set(qn('w:fldCharType'), 'end')
r_element = run._r
r_element.append(fldChar)
r_element.append(instrText)
r_element.append(fldChar2)
r_element.append(fldChar4)
Чтобы обновить этот table of contents, я нашел такой:
word = win32com.client.DispatchEx("Word.Application")
doc = word.Documents.Open(docx_file)
doc.TablesOfContents(1).Update()
doc.Close(SaveChanges=True)
word.Quit()
Этот код работает только для windows, т.к. используется библиотека
win32com.
Соответсвенно мне нужно другое решение.
Я прочитал что есть специальный тег в table of contents который при открытии документа обновляет сам table of contents, тем самым генерируя его.
Не уверен, что такое есть, если есть то вопрос: какой это тег?