2010-11-24 53 views
5

En utilisant PowerShell, il est assez facile de créer, par exemple, une instance de la classe application Excel et commencer à manipuler:Vous cherchez la valeur pour MS Office constantes Interop plutôt que du mal à les coder

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

Cependant, si j'ai besoin d'utiliser les constantes comme xlDoubleQuote ou xlDelimited - il semble que je sois forcé de les coder en dur. semble

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

Et voir qu'il retournerait la valeur de 1. Malheureusement, je ne peux pas créer une instance d'une énumération, et il ne pas être: Je voudrais vraiment pouvoir faire quelque chose comme un moyen de référencer comme vous le feriez une bibliothèque de classes .NET normale:

[Excel.Constants]::xlDoubleQuote 

Est-il possible d'importer dynamiquement cette énumération en PowerShell? Peut-être à travers les bibliothèques gérées plutôt que COM?

Répondre

4

Keith vous a déjà donné la réponse, voici une autre option. Vous pouvez utiliser la complétion sur les xlConstants de $ objet pour obtenir les 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

Utilisez l'assembly interop principal pour Excel. Si vous avez installé Office, ils doivent être dans le GAC. Utilisez comme ceci:

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

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

1

cependant, Keith et Shay ont donné des réponses parfaites, notez ceci:

Lorsque vous utilisez Excel 2003 ou Excel 2007, l'Office PIA Les assemblys (PIA) doivent être installés sur la machine. Il existe des versions redistribuables disponibles auprès de Microsoft. Voir cette annonce de stackoverflow.com ici pour plus d'informations:

Different Interop references on two different computers doesn't work