2013-01-09 55 views
5

這個可能會引發很多問題,所以我會盡量使其具體。我負責支持我的工作使用的第三方應用程序。這個應用程序的功能之一是從.dot文件中拉出來自拉入的數據庫的信息。它使用MERGEFIELD字段來執行此操作。當這個數據被拉入時,它允許正常的日期字段和打印日期字段保留,但創建(我需要的)和保存字段完全搞砸了。它將原始模板創建日期保留在那裏,而不是像模板通常那樣將當前日期插入到文檔創建日期中,並且使字段無效,以便它是純文本而不是創建字段,因此您無法更新它。當創建字段與郵件合併一起使用時,我找不到這是否爲標準行爲的確切答案。我會使用正常的日期,但這些文檔可以在幾天內編輯,最終將其轉換爲PDF以獲得「永久」副本。如果您從程序創建文檔,然後在第二天打開它,它會自動更新日期...不是我們想要的,需要在第一天打開它。是否有可能通過腳本更新Word文檔中的表單域

我有一個頓悟使用PowerShell腳本來更新模板本身的創建。管理這三行做到這一點:

$a = Get-Date 
$b = Get-Item "Q:\CUSTOM\DATETEST.dot" 
$b.CreationTime = $a 

此腳本效果很好,並更新文件信息。但是,爲了使文檔中的實際文字能夠反映出這一點,您必須進入Word,使用F9刷新窗體中的字段,然後保存它。即使使用更新的創建日期,當您在Word中或從其他應用程序中拉出文檔時,單詞文檔文本仍會顯示舊日期,直到刷新並手動保存模板爲止。這些表格不受保護,所以這不是問題。我看到了幾個編輯word文件的powershell腳本,但是無法準確找到刷新日期字段的腳本。我使用修改日期和表單中的savedate字段嘗試了此腳本,但這也需要進入並實際保存表單。在PowerShell或批處理(或任何腳本語言,不在乎這一點)方式有什麼方法可以使我刷新文檔中的表單域然後保存它們,或者任何人都可以想到其他任何方式嗎?我有幾個文件需要這樣做,所以每天早上手動完成也是不切實際的。

編輯:我發現下面的代碼,如下面評論。在這段代碼中,我還發現我需要將Documents.Add更改爲Documents.Open。我會注意到,這有助於按照我需要的方式操作保存日期,但創建仍然是一個謎。

$word=new-object -com Word.Application 
$doc=$word.Documents.Add($filename) 
$word.Visible=$False 
$word.ActiveDocument.Fields.Update() 
$doc.SaveAs([REF]$filename) 
$doc.Close() 
$word.Quit() 
+0

找到以下內容,然後在Google中搜索我的確切問題標題後...不知道爲什麼我之前無法搜索,因爲我的搜索類似:'code $ word = new-object -com Word.Application $ doc = $ word.Documents.Add($ filename) $ word.Visible = $ False $ word.ActiveDocument.Fields.Update() $ doc.SaveAs([REF] $ filename) $ doc.Close() $ word.Quit()'這仍然不能正常工作,因爲它不打開並保存模板,而是打開並嘗試保存.docx。仍然接受建議。 –

+1

歡迎來到SO!爲了使內容更具可讀性,請使用您找到的代碼修改原始帖子,然後將其放入評論中。 – Nick

+0

感謝您的建議......並不確定首選方法用於附加新發現的代碼。我已經得到了這一切,但想通了...我仍然寧願使用創建日期,但它只是不會更新,即使與Fields.Update。儘管這不是我的意圖,但是保存者有種做我需要的上面的代碼。 –

回答

2

將文檔保存爲模板,使用下面的代碼:

$word = new-object -com Word.Application 
$doc = $word.Documents.add($filename) 
$word.Visible = $False 
$saveFormat = [Enum]::Parse([Microsoft.Office.Interop.Word.WdSaveFormat],"wdFormatTemplate") 
$doc.SaveAs([ref]$filename2,[ref]$saveFormat) 
$doc.Close() 
$word.Quit() 

這是未經測試的模板,但我有它保存爲.doc而不是默認的.docx工作。另外,如果與打開的文件名稱相同,它不會讓您保存該文件。這就是爲什麼我將它改爲$filename2。您可能必須執行一些重命名技巧才能使其發揮作用,但這應該會讓您解決如何保存文件的問題。

+0

$ doc = $ Word.Document.open($ filename)而不是Document.Add適用於模板。但是,正如我之前所說的,出於某種原因,創建日期不會更新。我只是使用savedates(因爲原始應用程序無論如何都將它們轉換爲文本),並將其稱爲一天。謝謝! –

相關問題