2010-11-24 7 views
5

uso de PowerShell, es bastante fácil de crear, por ejemplo, una instancia de la clase de aplicación Excel y empezar a manipularlo:Mirando hacia arriba el valor de las constantes de MS Office de interoperabilidad en lugar de disco que la codificación

$app = New-Object -ComObject "Excel.Application" 

Sin embargo, si necesito usar las constantes como xlDoubleQuote o xlDelimited, parece que estoy forzado a codificarlas. Realmente me gustaría ser capaz de hacer algo como:

$constants = New-Object -ComObject "Excel.Constants" 
$constants.xlDoubleQuote 

Y ver que devolvería el valor de 1. Por desgracia no puedo crear una instancia de una enumeración, y no parece estar una manera de hacer referencia a ella como si fuera una biblioteca de clase normal de .NET:

[Excel.Constants]::xlDoubleQuote 

¿hay alguna manera de importar dinámicamente que la enumeración en PowerShell? ¿Tal vez a través de las bibliotecas administradas en lugar de COM?

Respuesta

4

Keith ya le dio la respuesta, aquí hay otra opción. Puede utilizar la implementación del tabulador en los $ xlConstants objeto para obtener las constantes:

$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 
8

Utilice el conjunto de interoperabilidad primario para Excel. Si tiene Office instalado, estos deberían estar en el GAC. Úselo así:

Add-Type -AssemblyName Microsoft.Office.Interop.Excel 
[int][Microsoft.Office.Interop.Excel.Constants]::xlDoubleQuote 
+1

O: [Microsoft.Office.Interop.Excel.Constants] :: xlDoubleQuote.Value__ –

1

Keith y Shay dieron respuestas perfectas, sin embargo, tenga en cuenta lo siguiente:

Al utilizar Excel 2003 o Excel 2007, la Oficina de interoperabilidad primarios Los ensambles (PIA) deben instalarse en la máquina. Hay versiones redistribuibles disponibles de Microsoft. Ver este anuncio stackoverflow.com aquí para obtener más información:

Different Interop references on two different computers doesn't work

Cuestiones relacionadas