続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
こんな例を挙げているのだから動きそうなものなんだけどなぁ。