続Excel2007の操作

英語環境だと動いているようなので、どーにかならないかと試行錯誤。

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}"))
{
    $old = [System.Threading.Thread]::CurrentThread.CurrentCulture
    trap 
    {
        [System.Threading.Thread]::CurrentThread.CurrentCulture = $old
    }
    [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
    & $script
    [System.Threading.Thread]::CurrentThread.CurrentCulture = $old
}

上記のようなカルチャーを変更してブロックを実行する関数を見つけたので、早速実験。

PS > using-culture 'ja-jp' {get-date}

2007年9月26日 1:20:52


PS > using-culture 'en-us' {get-date}

Wednesday, September 26, 2007 1:20:54 AM

きちんとカルチャー変更されているみたい。では、本題の

$s = {
$a = New-Object -comobject Excel.Application 
$a.Visible = $True 
$b = $a.workbooks.add()
$c = $b.Worksheets.Item(1) 
$c.Cells.Item(1,1) = "A value in cell A1." 
$b.SaveAs("C:\Scripts\Test.xls") 
$a.Quit()
}

using-culture 'en-us' $s

を実行してみると・・・やっぱりエラーでした。そう簡単にはいきませんね。(^^;

ただ、サポートページを見ると、

set the CultureInfo prior to calling the Excel method. For example:

とか言って、

Dim oApp As New Excel.Application()
oApp.Visible = True
oApp.UserControl = True
Dim oldCI As System.Globalization.CultureInfo = _
    System.Threading.Thread.CurrentThread.CurrentCulture
System.Threading.Thread.CurrentThread.CurrentCulture = _
    New System.Globalization.CultureInfo("en-US")
oApp.Workbooks.Add()
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI

こんな例を挙げているのだから動きそうなものなんだけどなぁ。