【发布时间】:2019-12-04 16:49:32
【问题描述】:
我正在使用 python 的 pywin32.client 扩展并构建一个 Word 文档。我尝试了很多很好的方法来生成 ToC,但都失败了。
我想我想做的是调用 ActiveDocument 对象并使用 MSDN 页面中的以下示例创建一个对象:
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
ActiveDocument.TablesOfContents.Add Range:=myRange, _
UseFields:=False, UseHeadingStyles:=True, _
LowerHeadingLevel:=3, _
UpperHeadingLevel:=1
除了在 Python 中它会是这样的:
wordObject.ActiveDocument.TableOfContents.Add(Range=???,UseFiles=False, UseHeadingStyles=True, LowerHeadingLevel=3, UpperHeadingLevel=1)
到目前为止,我已经使用“选择”对象(下面的示例)构建了所有内容,并希望在第一个分页符之后添加此 ToC。
这是文档的样例:
objWord = win32com.client.Dispatch("Word.Application")
objDoc = objWord.Documents.Open('pathtotemplate.docx') #
objSel = objWord.Selection
#These seem to work but I don't know why...
objWord.ActiveDocument.Sections(1).Footers(1).PageNumbers.Add(1,True)
objWord.ActiveDocument.Sections(1).Footers(1).PageNumbers.NumberStyle = 57
objSel.Style = objWord.ActiveDocument.Styles("Heading 1")
objSel.TypeText("TITLE PAGE AND STUFF")
objSel.InsertParagraph()
objSel.TypeText("Some data or another"
objSel.TypeParagraph()
objWord.Selection.InsertBreak()
####INSERT TOC HERE####
任何帮助将不胜感激!在一个完美的世界中,我会使用 Word GUI 中提供的默认第一个选项,但这似乎指向一个文件并且更难访问(关于模板)。
谢谢
【问题讨论】:
-
由于 toc 是从标题结构自动构建的,为什么不直接在模板中插入一个 toc 并从该模板创建一个文档?
-
@barny 我怎样才能让它坚持到第二页?当我使用
WordObject.Selection.action()结构时,文档就像我写的那样形成。如果我在模板中放置一个 ToC,它只会被推到右下角?有没有办法可以在第一页的顶部指定选择开始,然后跳转到 ToC 之后? -
在模板中的第 3 页(或任何地方)放置一个书签/标记。然后在您的代码中搜索标记,这就是您添加内容的地方。然后,您可以在模板、页眉/页脚、样式、图形等中放置您想要的任何其他格式。完全没有代码。这样,当有人说“我想要更大的 Normal 字体”时,您所要做的就是编辑模板,无需更改一行代码。您正在为大多数格式使用样式,而不是直接特定(手动编码)格式,除非在特殊情况下,对吧?然后您的客户就会非常高兴。
-
我明天会考虑尝试一下,然后告诉你进展如何。非常感谢!