【问题标题】:Word & Python - Create Table of ContentsWord 和 Python - 创建目录
【发布时间】: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 字体”时,您所要做的就是编辑模板,无需更改一行代码。您正在为大多数格式使用样式,而不是直接特定(手动编码)格式,除非在特殊情况下,对吧?然后您的客户就会非常高兴。
  • 我明天会考虑尝试一下,然后告诉你进展如何。非常感谢!

标签: python ms-word win32com


【解决方案1】:

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

这种方法有很多优点 - 您可以在 Word 中格式化您的模板,而不是编写所有代码细节,因此当有人说他们希望 Normal 字体更大时,您可以非常轻松地编辑模板以更新样式/smaller/pink 你可以通过编辑模板来做到这一点。确保在代码中使用样式,并且仅在与默认样式特别不同时应用格式。

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

【讨论】:

  • 是的,它有效吗?巴尼不厌其烦地试图帮助你。您至少可以提供反馈,帮助他人
猜你喜欢
  • 1970-01-01
  • 2012-07-26
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-22
相关资源
最近更新 更多