如何在vbscript中读写word文件的非标准文档属性?

时间:2014-04-01 11:36:20

标签: vbscript ms-word

Microsoft Word提供了一些要在Word文档中设置的默认文档属性。 有许多默认属性,vbscript具有常量。 但Word(2011)提供了更多属性,例如companyfaxnumber,publishingdate,keywords。

可以通过调用

来访问内置属性
Set oWord = CreateObject("Word.Application")
oWord.Visible = True
oWord.Documents.Open(strFilePath)
For Each prop In oWord.ActiveDocument.BuiltInDocumentProperties
    WScript.Echo prop.Name + "::" + oWord.ActiveDocument.BuiltInDocumentProperties(prop.Name).Value
Next

但我如何找到" custom"的名称?由word提供的属性,但在vbscript中不作为常量出现? 有功能

Document.CustomDocumentProperties

但如果我像上面那样做一个列表,我会得到名为info1,info2等的属性。

2 个答案:

答案 0 :(得分:2)

要访问Word CustomDocumentProperties,您需要能够访问OLE文件属性读取器。这扩展到普通/简单文档属性之外,因为它也允许您添加自定义属性。

2005年的脚本文章中有一篇故事,详细介绍了在Word中使用CustomDocumentProperties的安装和使用 - > Here

要下载安装OLE Property Reader DLL,Go - > Here

以下是安装属性读取后属性set / get的示例:

Const msoPropertyTypeBoolean = 2

Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open("C:\Scripts\New_users.xls")

'Set
'=======================================================================
objFile.CustomProperties.Add "Document Reviewed", msoPropertyTypeBoolean
objFile.Save

'Get
'=======================================================================
Set objProperty = objFile.CustomProperties.Item("Document Reviewed")
wscript.echo objProperty.Value 

享受!

答案 1 :(得分:0)

您最近想出了如何到达那里:

Word"前端编辑"是在欺骗文档属性。有一组硬性定义的属性,如作者,类别,关键字等。 编辑器提供的附加属性是所谓的自定义属性,它们在docx-container内部的外部XML结构中定义。 因此,没有简单的vbscript函数来修改这些自定义属性的值。 感谢网络,有人做了一些黑客攻击,这是它的解决方案:

Sub WriteCustomCoverProperties(ByRef wordInstance, strProp, strText)
    Dim oCustPart 
    Dim oNode 
    Dim strXPath 

    strProp = Replace(strProp, " ", "") 
    Select Case strProp 
        Case "Abstract" strXPath = "/ns0:CoverPageProperties[1]/ns0:Abstract[1]" 
        Case "PublishDate" strXPath = "/ns0:CoverPageProperties[1]/ns0:PublishDate[1]" 
        Case "CompanyAddress" strXPath = "/ns0:CoverPageProperties[1]/ns0:CompanyAddress[1]" 
        Case "CompanyPhone" strXPath = "/ns0:CoverPageProperties[1]/ns0:CompanyPhone[1]" 
        Case "CompanyFax" strXPath = "/ns0:CoverPageProperties[1]/ns0:CompanyFax[1]" 
        Case "CompanyEmail" strXPath = "/ns0:CoverPageProperties[1]/ns0:CompanyEmail[1]" 
        Case Else 
    Exit Sub 

    End Select 
    Set oCustPart = wordInstance.ActiveDocument.CustomXMLParts(3) 
    Set oNode = oCustPart.SelectSingleNode(strXPath) 
    oNode.Text = strText 
    Set oCustPart = Nothing 
    Set oNode = Nothing 
End Sub

可能有帮助=)