Word& Python - 创建目录

时间:2017-03-15 21:08:47

标签: python ms-word win32com

我正在为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中提供的默认第一个选项,但它似乎指向一个文件并且更难以访问(关于模板的东西)。

由于

1 个答案:

答案 0 :(得分:3)

手动,在Word中编辑模板,添加ToC(最初将为空)任何介绍内容,页眉/页脚等,然后在您希望插入文本内容的位置(即在ToC之后)放置一个唯一命名书签。然后在您的代码中,基于模板创建一个新文档(或打开模板,然后将其保存为其他名称),搜索书签并在那里插入您的内容。保存为其他文件名。

这种方法有各种各样的优点 - 您可以在Word中格式化模板而不是编写所有代码详细信息,因此当有人说他们希望Normal字体更大时,您可以非常轻松地编辑模板以更新样式/ small / pink你可以通过编辑模板来实现。确保在代码中使用样式,并且只有在与默认样式明显不同时才应用格式。

不确定如何确保实际生成ToC,可能会在每次保存时自动更新。