从Office VBA对象模型中提取功能签名?

时间:2014-07-31 08:32:14

标签: vba extract

有没有办法从对象库二进制文件中提取函数/属性数据(例如,通常位于C:\Program Files\Microsoft Office\Office14\MSACC.OLB的Microsoft Access对象14.0库)?

我对实现细节不感兴趣,我只想提取公共接口 - 这就是:

Class: TextBox
    Properties:
         Property Get BackColor() As Long
         Property Let BackColor(value As Long)
         ... (etc)

    Functions:
         Sub Move(Left, [Top], [Width], [Height])
         ... (etc)

    Events:
         Event AfterUpdate()
         Event BeforeUpdate(Cancel As Integer)
         ... (etc)

确切的格式并不重要 - 我只需要以任何格式对这些数据进行文本转储(然后我会在其周围编写一个程序来解析它)。在C ++世界中,这基本上是头文件的摘录。

据推测,这是VBE中的对象资源管理器已经完成的(以及自动完成,以及任何其他能够读取*.olb文件的程序),遗憾的是我甚至不知道从哪里开始(谷歌搜索) "从olb文件中提取" /"读取olb文件"没有产生任何有用的结果)。有人可以提供任何建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用PowerShell轻松完成此操作。语法是:

New-Object -ComObject <com object>

要列出Excel.Application中的所有媒体资源,我们会使用Get-Member

New-Object -ComObject Excel.Application | Get-member

要在文本文件中导出列表:

New-Object -ComObject Excel.Application | Get-member | Format-Table -Wrap -Autosize | Out-File list.txt

编辑:

COM对象已在HKEY_LOCAL_MACHINE\SOFTWARE\Classes

中注册
get-ChildItem "REGISTRY::HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.*" | foreach-object {New-Object -ComObject $_.pschildname | Get-member | Format-Table -Wrap -Autosize | Out-File $($_.pschildName + ".txt") }

此命令将列出名称以Excel.开头的所有COM对象,并在名为<com object>.txt的文件中打印其各自的属性。