2009-10-14 10 views
1

J'essaye d'automatiser Excel dans Powershell 1.0 et j'ai du mal à essayer d'appliquer une propriété "Font.ColorIndex" aux cellules.Powershell 1.0 Excel Automation - Problème avec "Font.ColorIndex"

Voici Microsoft KB article détaille un BUG avec l'automatisation Excel lorsque l'ordinateur exécutant le script a un paramètre régional autre que « en-us »

Mon exemple de script ci-dessous fonctionne parfaitement lorsque je change manuellement mes paramètres régionaux et régionaux à « en-us » et échoue dans la dernière ligne que lorsqu'il est réglé sur « fr-fr »

$Excel = New-object -com Excel.Application 
$culture = [System.Globalization.CultureInfo]'en-us' 
$Book = $Excel.Workbooks.psbase.gettype().InvokeMember("Add", 
     [Reflection.BindingFlags]::InvokeMethod, 
     $null, $Excel.Workbooks, $null, $culture) 
$Sheet = $Book.Worksheets.Item(1) 
$Excel.Visible = $True 
$Sheet.Cells.Item(1,1).FormulaLocal = "test" 
$Sheet.Cells.Item(1,1).Font.ColorIndex = 3 

Comme indiqué précédemment, Si mon locale est réglé sur « fr-fr » le script fonctionne bien jusqu'à ce que le dernier ligne où il échoue avec:

La propriété 'ColorIndex' est introuvable sur cet objet; assurez-vous qu'il existe et est réglable. At: ligne: 10 char: 29 + $ Sheet.Cells.Item (1,1) .Font. < < < < ColorIndex = 3

Est-ce que quelqu'un a des idées sur la façon de résoudre ce (autres que je crée mon locale à « en-us » bien sûr !!)

Merci -Mark

Répondre

1

Il apparaît à partir de l'article de la base de connaissances que les solutions de contournement impliquent tous la définition de la culture à en-US sauf si vous souhaitez installer le MUI pour Office sur votre PC. La bonne nouvelle est que vous pouvez temporairement définir la culture sur en-US dans votre script pour le code problématique. Le script suivant est quelque chose que le PowerShell team posted il y a longtemps, mais est toujours à portée de main:

Function Using-Culture (
[System.Globalization.CultureInfo]$culture = ` 
    (throw "USAGE: Using-Culture -Culture culture -Script {scriptblock}"), 
[ScriptBlock]$script= ` 
    (throw "USAGE: Using-Culture -Culture culture -Script {scriptblock}")) 
{ 
    $OldCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture 
    trap 
    { 
     [System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture 
    } 
    [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture 
    Invoke-Command $script 
    [System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture 
} 

Execute la dernière ligne comme ainsi et voir si cela fonctionne:

Using-Culture en-US { $Sheet.Cells.Item(1,1).Font.ColorIndex = 3 } 
+0

Merci Keith, mais il m'a été impossible d'obtenir ce travail et ont vu des commentaires où d'autres personnes disent que cela n'a pas fonctionné pour eux non plus. – Mark

+0

Avez-vous essayé d'exécuter tout le script Excel dans la fonction Using-Culture? J'ai utilisé cette fonction pour tester des sections de données localisées dans PowerShell 2.0, donc je sais que "en général" cela fonctionne. Peut-être pas pour Excel cependant. –

+0

oui essayé dans la fonction. Je suis d'accord "en général" cela fonctionne et est la soltuion correcte cependant, pas avec Excel. Je pense que la meilleure solution serait d'écrire la sortie HTML et enregistrer au format .xls? pas encore sûr mais va jouer avec. Merci pour vos efforts – Mark