2016-12-04 55 views
2

我想編寫一個VBScript,它將在當前目錄中創建一個新的Word文檔。我已經試過這樣的事情:在不調用Word的情況下創建一個新的Word文檔

Set word = CreateObject("Word.Application") 
Set document = word.Documents.Add() 
document.SaveAs(filename) 

它基本的工作原理,但我想這樣做,但不調用Word應用程序。

當我在文件瀏覽器窗口中右鍵單擊時,出現一個彈出菜單,其中包含一個「新建」選項,可以從中選擇「Microsoft Word文檔」。這會在不調用Word應用程序的情況下在當前目錄中創建一個新的Word文檔,這是我想要在VBScript中執行的操作。

有誰知道我該怎麼寫?

作爲解決方法,我現有的VBScript將現有的空白Word文件複製到當前目錄。這工作得很好。一個缺點是新創建的文件具有原始文件的創建時間和/或最後修改時間。我怎樣才能「觸摸」新創建的文件(再次,不用調用Word),使其看起來已經「立即」創建?

回答

1

你可以嘗試這個創建一個空文本文件並將擴展名改爲.docx。這不是一個'合適的'空docx文件,但它將作爲空白的新Word文檔打開。

Dim objFSO, strDoc, objFile 

' create object to interact with file system 
Set objFSO = CreateObject("Scripting.FileSystemObject") 

'name of word doc to create 
strDoc = "D:\test.docx" 

' create blank file and close 
Set objFile = objFSo.CreateTextFile(strDoc) 
objFile.Close 

' clean up 
Set objFile = Nothing 
Set objFSO = Nothing 
+1

Shorter:'CreateObject(「Scripting.FileSystemObject」)。CreateTextFile(「D:\ test.docx」)''。如果不將文件句柄分配給變量,它將自動關閉。清理是在執行離開上下文時自動發生的,所以'Set foo = Nothing'通常不是必需的,只是混亂了代碼。爲了創建一個合適的.docx(或者理解你爲什麼不想在沒有Word的情況下做到這一點),請參閱[這裏](https://www.toptal.com/xml/an-informal-introduction-to-docx)。 –

2

新→ Microsoft Word文檔上下文菜單項做什麼基本上是你的解決方法的組合,並且提供了答案Robin Mackenzie。通過資源管理器右鍵菜單

新文檔創建由這些註冊表項決定:

  • HKCR\.doc\Word.Document.8\ShellNew(字二千零三分之九十七文檔)
  • HKCR\.docx\Word.Document.12\ShellNew(OOXML文檔)
  • …

如果鍵包含字符串值FileName和目錄%windir%\ShellNew包含文件winword8.doc(用於Word文檔2003分之97)和winword12.docx(OOXML爲文檔)的新文件將作爲文件的一個副本創建。

如果沒有匹配的文件中%windir%\ShellNew存在,或者註冊表項包含一個空字符串值,而不是NullFile的價值FileName,新的文件將被作爲零長度的文件(基本上是空的ANSI文本文件)創建的。 Word在打開它們時會自動轉換這些文件。

如果註冊表項既不包含值FileName也不包含值NullFile對給定文件類型不顯示上下文菜單項。

如果您的腳本只是需要創建一個沒有任何特定內容或格式的新空文檔,我會採用Robin建議的方法。否則堅持你目前的複製模板文件的方法。

+0

謝謝大家!簡而言之,我將不得不堅持我原來的策略,即將現有的Word文件複製到所需的位置,但我需要新複製的文件顯示爲剛剛創建(而不是保留創建/原始文件的修改日期/時間)。在UNIX中,我會簡單地使用「touch」來完成此操作,但我不知道如何在我的VBS腳本中執行此操作。再次,我必須避免調用Word應用程序。看來我應該可以用我的文件系統對象以某種方式做到這一點。 –

+0

這似乎是我想要完成的 「觸摸」 的內容: 昏暗objShell,objFolder // 設置objShell =的CreateObject( 「Shell.Application」)// 設置objFolder = objShell.NameSpace(fso.GetAbsolutePathName(」。 「))// objFolder.Items.Item(filename).ModifyDate = Now –

+0

@NoodlesNebula我會使用[''FileSystemObject'](https://msdn.microsoft.com/en-us/library/c8xh895w。 aspx)實例而不是「Shell.Application」實例。 –