将文档文件目录的文档属性拉入Excel工作表

将文档文件目录的文档属性拉入Excel工作表,excel,vba,properties,ms-word,Excel,Vba,Properties,Ms Word,我有一个满是MS Word.Doc文件的目录。我需要生成这些文件的列表,每个文件都有页数,例如,文件1-50个字,文件2-100个字等等。似乎在Excel文件名中的a列,页数中的B列最容易做到这一点,尽管我并没有完全做到这一点 令人沮丧的是,我可以通过添加Pages字段在Windows资源管理器中查看此信息,因此我知道信息在那里,但我无法打印或以其他方式处理它。我可以使用命令提示符Dir命令生成一个要导入Excel的文件列表,但我想不出一种方法来让该列表包含页面计数 有人有什么想法吗 更新2删除

我有一个满是MS Word.Doc文件的目录。我需要生成这些文件的列表,每个文件都有页数,例如,文件1-50个字,文件2-100个字等等。似乎在Excel文件名中的a列,页数中的B列最容易做到这一点,尽管我并没有完全做到这一点

令人沮丧的是,我可以通过添加Pages字段在Windows资源管理器中查看此信息,因此我知道信息在那里,但我无法打印或以其他方式处理它。我可以使用命令提示符Dir命令生成一个要导入Excel的文件列表,但我想不出一种方法来让该列表包含页面计数

有人有什么想法吗

更新2删除了1,因为我意识到我是个白痴:


我试图从VSB文件执行Noodle的脚本,但在第6行出现下标超出范围错误。没有对我最初在回复中发布的内容进行任何更改,但它们导致了不同的问题,并且无法找出错误的来源。建议?

此代码转储文件夹的所有shell属性,您可以使用Excel中的导入数据来导入该文件夹。它是VBScript,VBScript是合法的VBA,所以您可以优化它的速度,使其成为VBA正常编程风格或按原样使用

Ag0是命令行参数,即要执行的文件夹。不能在VBA中使用此方法,但必须在应用程序对象excel或word中替换为主机的excel/word等效方法

Set objShell = CreateObject("Shell.Application")
Set Ag=Wscript.Arguments
set WshShell = WScript.CreateObject("WScript.Shell")

'Set Fldr=objShell.NameSpace(32)
Set Fldr=objShell.NameSpace(Ag(0))
Set FldrItems=Fldr.Items
Set fso = CreateObject("Scripting.FileSystemObject")


Set DeskFldr=objShell.Namespace(16)
FName=fso.buildpath(DeskFldr.self.path, "Folder Property List.txt")


Set ts = fso.OpenTextFile(FName, 8, true)



For x = 0 to 100
    t1 = t1 & Fldr.GetDetailsOf(vbnull, x) & vbtab
Next
ts.write FLDR.self.path & vbcrlf
ts.Write T1 & vbcrlf
T1=""


For Each FldrItem in FldrItems
    For x = 0 to 100
        t1 = t1 & Fldr.GetDetailsOf(FldrItem, x) & vbtab
    Next
    t1=t1 & vbcrlf
    ts.Write T1
    T1=""
Next

msgbox FName & "has a tab delimited list of all properties"
注意:根据运行该程序的Windows版本的不同,该程序有不同的输出,每个版本都不同。“我的Vista”没有页面字段。

Microsoft有一个帮助解决此问题的。它允许您从关闭的office文档访问属性。您可以下载它,通过运行.exe文件安装它,然后在VBE的“工具/引用”中设置对它的引用

如果这是普遍使用的,您可能需要添加一系列错误检查以确保输入有效

此外,如果您尝试在64位版本的Office中使用它,可能会出现一些问题。我在Windows7 Professional x64上运行Office 2007 32位

Option Explicit
'Set Reference to Microsoft Scripting Runtime
'Set Reference to DSO OLE Document Properties Reader 2.1
Sub GetWordCountsFromDocs()
    Const PathName As String = "c:\users\ron\documents\"
    Dim FSO As FileSystemObject
    Dim FO As Folder
    Dim FIs As Files, FI As File
    Dim lWC As Long
    Dim ColWC As Collection
    Dim V()
    Dim I As Long

Set ColWC = New Collection
Set FSO = New FileSystemObject
Set FO = FSO.GetFolder(PathName)
Set FIs = FO.Files
ReDim V(1 To 2)
For Each FI In FIs
    If FI.Name Like "*.doc*" Then
        lWC = GetWordCount(PathName & FI.Name)
        V(1) = FI.Name
        V(2) = lWC
        ColWC.Add V
    End If
Next FI

ReDim V(0 To ColWC.Count, 1 To 2)
V(0, 1) = "File Name"
V(0, 2) = "Word Count"
For I = 1 To ColWC.Count
    V(I, 1) = ColWC(I)(1)
    V(I, 2) = ColWC(I)(2)
Next I

ActiveSheet.Cells.Clear
Range("a1").Resize(UBound(V, 1) + 1, UBound(V, 2)) = V

End Sub
'-------------------------------------------------
Private Function GetWordCount(FilePath As String) As Long
    Dim DSO As DSOFile.OleDocumentProperties
    Dim Prop As Office.DocumentProperty
    Dim V As Variant

Set DSO = New DSOFile.OleDocumentProperties
DSO.Open sFileName:=FilePath, ReadOnly:=True
GetWordCount = CallByName(DSO.SummaryProperties, "wordcount", VbGet)
End Function

我无法安装DLL,因此这是最吸引人的选择,但我似乎实现了错误。我已经编辑了原始文章,以包含我正在尝试的脚本。只需将行放在文本文件中。我把文件夹拖放到文件上,效果很好。遗憾的是,Pages也不是它在2007年输出的领域之一。