查找MS Office Interop常量的值而不是硬编码

Goy*_*uix 7 com powershell ms-office office-interop

使用PowerShell,可以轻松创建Excel Application类的实例并开始操作它:

$app = New-Object -ComObject "Excel.Application"
Run Code Online (Sandbox Code Playgroud)

但是,如果我需要使用像xlDoubleQuote或xlDelimited这样的常量 - 似乎我不得不对它们进行硬编码.我真的希望能够做到这样的事情:

$constants = New-Object -ComObject "Excel.Constants"
$constants.xlDoubleQuote
Run Code Online (Sandbox Code Playgroud)

并且看到它将返回值1.不幸的是我无法创建枚举的实例,并且似乎没有像普通.NET类库那样引用它的方法:

[Excel.Constants]::xlDoubleQuote
Run Code Online (Sandbox Code Playgroud)

有没有办法将该枚举动态导入PowerShell?也许通过托管库而不是COM?

Kei*_*ill 9

使用Excel的主互操作程序集.如果您安装了Office,则这些应该在GAC中.使用如下:

Add-Type -AssemblyName Microsoft.Office.Interop.Excel
[int][Microsoft.Office.Interop.Excel.Constants]::xlDoubleQuote
Run Code Online (Sandbox Code Playgroud)


Sha*_*evy 4

基思已经给了你答案,这是另一个选择。您可以在 $xlConstants 对象上使用制表符补全来获取常量:

$xl = New-Object -ComObject Excel.Application
$constants = $xl.gettype().assembly.getexportedtypes() | where-object {$_.IsEnum -and $_.name -eq 'constants'}

$pso = new-object psobject
[enum]::getNames($constants) | foreach { $pso | Add-Member -MemberType NoteProperty $_ ($constants::$_) }
$xlConstants = $pso
Run Code Online (Sandbox Code Playgroud)