Word&Python - 创建目录

问题描述 投票:4回答:1

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

谢谢

python ms-word win32com
1个回答
3
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.