共用方式為


嗨,Scripting Guy!

嗨,Scripting Guy!

歡迎蒞臨 TechNet 專欄,Microsoft Scripting Guys 會在此為您解答有關系統管理指令碼的常見問題。您有關於系統管理指令碼方面的問題嗎?請將電子郵件傳送到 scripter@microsoft.com。我們無法保證能夠逐一回答每個問題,不過我們會盡力而為。

還有,別忘了瞧瞧全新經過改良的嗨,Scripting Guy!過往文件

今天的問題:如何在 Word 文件中插入數個檔案,而且每個檔案以分頁符號隔開?


如何在 Word 文件中插入數個檔案,而且每個檔案以分頁符號隔開?

嗨,Scripting Guy!今年 5 月 3 日您曾介紹過怎麼將數個檔案合併至 Microsoft Word。我想在合併檔案之餘,在每個檔案中間插入一個分頁符號。

-- CE

CE,您好。我們一讀到您的電子郵件,第一個想到的就是我們在 2005 年 5 月 3 日真的介紹過如何合併數個檔案嗎?並不是因為把多個檔案合併到一個 Microsoft Word 文件的主題不重要,這的確是本專欄應該處理的問題。 原因是這樣的,有時候我們整天不幹活,5 月 3 日也可能不事生產,一查之下,赫然發現讀者是對了,5 月 3 日原來不是懶惰天 (近來腦袋好像有點不太靈光)。

您記性真好 (想必您也記得每一篇《嗨, Scripting Guy!》專欄),在那篇初刊專欄我們用了一個指令碼,把 C:\Scripts\Archive 資料夾內所有的檔案匯入一個 Microsoft Word 文件。一切都很順利,那時我們只不過在每個檔案結尾 (也就是下個檔案開頭) 加了一個段落符號。如果您一定得知道每個檔案結尾或開頭之處在哪裡,小小一個段落符號其實沒啥大用。CE 您說得是,在檔案間塞入一個分頁符號的確需要。方法如下:

Const wdPageBreak = 7 
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
Set FileList = objWMIService.ExecQuery _
    ("ASSOCIATORS OF {Win32_Directory.Name='C:\Scripts\Archive'} Where " _
        & "ResultClass = CIM_DataFile")
For Each objFile in FileList
    objSelection.InsertFile(objFile.Name)
    objSelection.InsertBreak(wdPageBreak)
Next

由於大部分的指令碼只是複製了插入多個檔案的部分,這裡不加逐行贅述 (好奇的讀者不妨看看原先專欄)。我們把精力放在兩個更動上面。

先是定義一個名為 wdPageBreak 的常數,並且將值設為 7,之後會使用此常數告知 Word 在呼叫 InsertBreak 方法時插入一個分頁符號 (各位應該也知道,Word 允許您插入各種分隔符號,例如分欄符號、文字換行分隔符號以及各種分節符號。)

然後我們用一些程式碼繫結到本機電腦的 WMI 服務,建立一個新的 Microsoft Word 文件,再使用 Associators Of 查詢擷取 C:\Scripts\Archive 資料夾內所有的檔案集合。取得檔案集合後,我們設定一個 For Each 迴圈處理該集合,並使用 InsertFile 插入每一個檔案。

這裡是本指令碼和原先的那一份第二個不同之處。我們在原先的指令碼中呼叫 InsertFile 方法,然後使用 TypeParagraph() 模擬在鍵盤上按下 ENTER 鍵的結果。而在本指令碼的 For Each 迴圈看起來像這樣:

For Each objFile in FileList
    objSelection.InsertFile(objFile.Name)
    objSelection.InsertBreak(wdPageBreak)
Next

如您所見,插入第一個檔案後我們呼叫 InsertBreak 方法,指定插入一個分頁符號。插入分頁符號後再跑一次迴圈,插入集合裡的第二個檔案。最後的結果就是匯入文件內的每個檔案中間都有一個分頁符號。

這樣看起來好多了。反正今天來也來了,就做多一點事情吧。我們改寫過的指令碼不僅會在每個檔案間插入分頁符號,還會在每個分頁符號後輸入檔案路徑,路徑格式以 14 級 Arial 字型呈現 (其餘文字為 10 級 Arial 字型)。下面就是我們附贈的指令碼:

Const wdPageBreak = 7 
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection
Set FileList = objWMIService.ExecQuery _
    ("ASSOCIATORS OF {Win32_Directory.Name='C:\Scripts\Archive'} Where " _
        & "ResultClass = CIM_DataFile")
objSelection.Font.Name = "Arial"
For Each objFile in FileList
    objSelection.Font.Size = "14"
    objSelection.TypeText objFile.Name
    objSelection.TypeParagraph()
    objSelection.Font.Size = "10"
    objSelection.InsertFile(objFile.Name)
    objSelection.InsertBreak(wdPageBreak)
Next


附註:如需在 Word 文件格式化文字的詳細資訊,請參閱 Office Space 每週專欄內有關 Microsoft Word 的文章。


還挺好玩的,乾脆每年 5 月 3 日都工作好了,稍微勤勞一點吧!

嗯,考慮一下......


如需詳細資訊

查看嗨,Scripting Guy!- 過往文件

 

回到頁首 回到頁首