【问题标题】:Create a new Word document without invoking Word在不调用 Word 的情况下创建新的 Word 文档
【发布时间】:2016-12-04 01:41:35
【问题描述】:

我想编写一个 VBScript,它将在当前目录中创建一个新的 Word 文档。我试过这样的事情:

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

它基本上可以工作,但我想在不调用 Word 应用程序的情况下这样做。

当我在文件资源管理器窗口中单击鼠标右键时,我会看到一个弹出菜单,其中包含一个“新建”选项,我可以从中选择“Microsoft Word 文档”。这将在当前目录中创建一个新的 Word 文档,而无需调用 Word 应用程序,这就是我想在我的 VBScript 中执行的操作。

有人知道我怎么写吗?

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

【问题讨论】:

    标签: vbscript ms-word


    【解决方案1】:

    New → Microsoft Word Document 上下文菜单项的作用基本上是您的解决方法和提供的答案Robin Mackenzie 的组合。

    通过资源管理器上下文菜单创建新文档由以下注册表项控制:

    • 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 建议的方法。否则请坚持使用当前复制模板文件的方法。

    【讨论】:

    • 谢谢大家!长话短说,我将不得不坚持将现有 Word 文件复制到所需位置的原始策略,但我需要新复制的文件看起来好像刚刚创建(而不是保留创建/原始文件的修改日期/时间)。在 UNIX 中,我会简单地使用“触摸”来完成此操作,但我不知道如何在我的 VBS 脚本中执行此操作。同样,我必须避免调用 Word 应用程序。看来我应该能够用我的文件系统对象以某种方式做到这一点。
    • 这似乎是我想要完成的“触摸”: Dim objShell, objFolder // Set objShell = CreateObject("Shell.Application") // Set objFolder = objShell.NameSpace(fso. GetAbsolutePathName(".")) // objFolder.Items.Item(filename).ModifyDate = Now
    • @NoodlesNebula 我会使用 FileSystemObject 实例而不是 Shell.Application 实例。
    • 我喜欢你的想法,Ansgar,但我的经验太少了,所以我需要更多的手来了解如何做到这一点:-)
    • 请为此发布一个新问题。
    【解决方案2】:

    您可以尝试创建一个空文本文件并将扩展名更改为 .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
    

    【讨论】:

    • 短:CreateObject("Scripting.FileSystemObject").CreateTextFile("D:\test.docx")。如果不将文件句柄分配给变量,它将自动关闭。当执行离开上下文时,清理会自动发生,因此Set foo = Nothing 通常不是必需的,只会使代码混乱。要创建正确的 .docx(或了解为什么不使用 Word 就不想这样做),请参阅 here
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多