Vbscript 在不调用Word的情况下创建新Word文档

Vbscript 在不调用Word的情况下创建新Word文档,vbscript,ms-word,Vbscript,Ms Word,我想写一个VBScript,它将在当前目录中创建一个新的Word文档。我试过这种方法: Set word = CreateObject("Word.Application") Set document = word.Documents.Add() document.SaveAs(filename) 它基本上是可以工作的,但是我不想调用Word应用程序 当我在文件浏览器窗口中右键单击时,会出现一个弹出菜单,其中包含一个“新建”选项,我可以从中选择“Microsoft Word文档”。这将在当前目

我想写一个VBScript,它将在当前目录中创建一个新的Word文档。我试过这种方法:

Set word = CreateObject("Word.Application")
Set document = word.Documents.Add()
document.SaveAs(filename)
它基本上是可以工作的,但是我不想调用Word应用程序

当我在文件浏览器窗口中右键单击时,会出现一个弹出菜单,其中包含一个“新建”选项,我可以从中选择“Microsoft Word文档”。这将在当前目录中创建一个新的Word文档,而不调用Word应用程序,这是我希望在VBScript中执行的操作

有人知道我怎么写吗


作为一种解决方法,我现有的VBScript将现有的空白Word文件复制到当前目录。这很有效。一个缺点是,新创建的文件具有原始文件的创建时间和/或上次修改时间。如何“触摸”新创建的文件(同样,不调用Word),使其看起来是“立即”创建的?

您可以尝试创建一个空文本文件并将扩展名更改为.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
有什么新鲜事→ Microsoft Word文档上下文菜单项基本上是解决方法和提供的答案的组合

通过Explorer上下文菜单创建的新文档由以下注册表项控制:

  • HKCR\.doc\Word.Document.8\ShellNew
    (Word 97/2003文档)
  • HKCR\.docx\Word.Document.12\ShellNew
    (OOXML文档)
如果键包含字符串值
FileName
,并且目录
%windir%\ShellNew
包含文件
winword8.doc
(对于Word 97/2003文档)和
winword12.docx
(对于OOXML文档),则新文档将作为该文件的副本创建

如果
%windir%\ShellNew
中不存在匹配的文件,或者注册表项包含空字符串值
NullFile
而不是值
FileName
,则新文件将创建为零长度文件(基本上是空的ANSI文本文件)。Word在打开这些文件时会自动转换这些文件

如果注册表项既不包含值
FileName
也不包含值
NullFile
则不会显示给定文件类型的上下文菜单项


如果您的脚本只需要创建一个没有任何特定内容或格式的新空文档,我会使用Robin建议的方法。否则,请使用当前复制模板文件的方法。

Shorter:
CreateObject(“Scripting.FileSystemObject”).CreateTextFile(“D:\test.docx”)
。如果不将文件句柄指定给变量,它将自动关闭。当执行离开上下文时,会自动进行清理,因此通常不需要设置foo=Nothing,只会弄乱代码。要创建一个合适的.docx(或者理解为什么您不想在没有Word的情况下这样做),请参阅。谢谢大家!长话短说,我必须坚持将现有Word文件复制到所需位置的原始策略,但我需要新复制的文件显示为刚刚创建的文件(而不是保留原始文件的创建/修改日期/时间)。在UNIX中,我只是简单地使用“touch”来实现这一点,但我不知道如何在VBS脚本中实现这一点。同样,我必须避免调用Word应用程序。似乎我应该能够用我的文件系统对象以某种方式做到这一点。这似乎就是我想要完成的“触摸”:Dim objShell,objFolder//Set objShell=CreateObject(“Shell.Application”)//Set objFolder=objShell.NameSpace(fso.GetAbsolutePathName(“.”)//objFolder.Items.Item(文件名).ModifyDate=Now@NoodlesNebula我会使用一个实例而不是一个
Shell.Application
实例。我喜欢你的想法,Ansgar,但我的经验水平太低,所以我需要更多的人手来了解具体的操作方法:-)请为此发布一个新问题。