2017-03-15 88 views
2

我使用Python中pywin32.client延伸,建设一个Word文档表。我尝试了很多方法来生成ToC,但都失败了。Word和Python的 - 创建目录

我想我想要做的就是调用的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#### 

任何帮助将不胜感激!在一个完美的世界,我会用它可从话语GUI,但似乎指向一个文件,是很难获得(一些有关模板)的默认第一个选项。

感谢

+0

由于TOC自动从YHE头结构构建,为什么不直接插入目录中的模板,该模板创建一个文档? – barny

+0

@barny我怎样才能让它坚持到第二页?当我使用'WordObject.Selection.action()'结构时,文档就像我写的那样。如果我在模板中放置一个ToC,它会被推到右下角?有没有一种方法可以指定第一页顶部的选择开始,然后跳转到ToC之后? – Abraxas

+1

将书签/标记放入模板中,位于第3页(或任何地方)。然后在你的代码中搜索标记,这就是你添加内容的地方。然后,您可以在模板,页眉/页脚,样式,图形等任何其他格式,绝对没有代码。这样,当有人说“我希望Normal字体更大”时,您只需编辑模板,无需更改一行代码。您正在使用大多数格式的样式,而不是直接特定(手写)格式,除非特殊情况,对吗?然后你的客户非常高兴。 – barny

回答

1

编辑您的Word模板,添加TOC(这将是初始为空),然后在你想去的地方您的文本内容插入(即ToC的)之后把一个唯一命名的书签。然后在你的代码,创建一个基于模板的新文档(或打开该模板,然后将其保存到一个不同的名称),搜索书签,然后插入你的内容在那里。保存到不同的文件名。

此方法具有各种优点 - 您可以在Word中设置您的模板格式,而不是编写所有代码细节,因此您可以非常轻松地编辑模板以在有人说他们希望使用普通字体时更新样式更大/更小/粉红色,只需编辑模板即可完成。确保在您的代码中使用样式,并且仅在与默认样式明显不同时应用格式。

不知道你是如何确保实际产生TOC中,可能会自动更新,每次保存。

+0

你试过这个/做过它吗? – barny