Powershell 1.0 Excel自动化 – 问题与“Font.ColorIndex”

我试图在Powershell 1.0中自动化Excel,并且在尝试应用单元格“Font.ColorIndex”属性时遇到问题。

以下Microsoft知识库文章详细介绍了使用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”,则脚本将正常工作,直到失败的最后一行为止:

无法在此对象上find属性“ColorIndex”; 确保它存在并可设置。 在:行:10 char:29 + $ Sheet.Cells.Item(1,1).Font。 <<<< ColorIndex = 3

有没有人有任何想法如何解决这个问题(除了设置我的区域设置为“en-us”当然!!)

谢谢,马克

从知识库文章看来,解决方法都涉及到将文化设置为en-US,除非您想在PC上安装MUI for Office。 好消息是,您可以在脚本中暂时将文化设置为en-US,以解决有问题的代码。 以下脚本是PowerShell团队很早以前发布的,但仍然非常方便:

 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 }