2009-10-14 46 views
1

我想在Powershell 1.0中自動化Excel,並且在嘗試應用單元格「Font.ColorIndex」屬性時遇到問題。Powershell 1.0 Excel自動化 - 問題與「Font.ColorIndex」

以下Microsoft KB文章詳細介紹了用Excel自動化BUG時運行該腳本的計算機有一個區域以外的設置「EN-US」

我在下面的示例腳本完美的作品時,我手動更改我的語言環境和區域設置到「EN-US」,並未能在設置爲「en-GB」只有當最後一行

$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 

如前所述,如果我的區域設置爲「en-GB」腳本運行正常,直到最後在線失敗的地方:

無法在此對象上找到'ColorIndex'屬性;確保它存在並可設置。 At:line:10 char:29 + $ Sheet.Cells.Item(1,1).Font。 < < < < ColorIndex = 3

沒有人有任何想法如何(不是設置「美恩」當然!我的語言環境等)

感謝 馬克

回答

1

它來解決這個從知識庫文章中可以看出,解決方法都涉及將文化設置爲en-US,除非您想在PC上安裝MUI for Office。好消息是,您可以在腳本中暫時將文化設置爲en-US,以解決有問題的代碼。下面的腳本是後話了PowerShell team posted很久以前,但仍然是得心應手:

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 
} 

執行的最後一行,像這樣,看看它的工作原理:

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

謝謝基思但我一直無法得到這工作,並看到其他人認爲這並沒有爲他們工作的評論。 – Mark

+0

您是否嘗試在Using-Culture功能中運行所有Excel腳本?我已經使用這個函數來測試PowerShell 2.0中的本地化數據部分,所以我知道「一般來說」它可以工作。雖然也許不適用於Excel。 –

+0

是在該功能內嘗試的。我同意「總的來說」它確實起作用,然而它是正確的解決方案,而不是用excel。我認爲最好的解決方案是編寫HTML輸出並保存爲.xls格式?還不確定,但會去玩它。感謝您的努力 – Mark