2017-03-15 138 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