我正在为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)
到目前为止,我已经使用'Selection'对象(下面的示例)构建了所有内容,并希望在第一次分页后添加此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中提供的默认第一个选项,但它似乎指向一个文件并且更难以访问(关于模板的东西)。
由于
答案 0 :(得分:3)
手动,在Word中编辑模板,添加ToC(最初将为空)任何介绍内容,页眉/页脚等,然后在您希望插入文本内容的位置(即在ToC之后)放置一个唯一命名书签。然后在您的代码中,基于模板创建一个新文档(或打开模板,然后将其保存为其他名称),搜索书签并在那里插入您的内容。保存为其他文件名。
这种方法有各种各样的优点 - 您可以在Word中格式化模板而不是编写所有代码详细信息,因此当有人说他们希望Normal字体更大时,您可以非常轻松地编辑模板以更新样式/ small / pink你可以通过编辑模板来实现。确保在代码中使用样式,并且只有在与默认样式明显不同时才应用格式。
不确定如何确保实际生成ToC,可能会在每次保存时自动更新。