代码之家  ›  专栏  ›  技术社区  ›  Mark

PowerShell 1.0 Excel自动化-“font.colorindex”有问题

  •  1
  • Mark  · 技术社区  · 15 年前

    i_m尝试在PowerShell 1.0中自动化Excel,但在尝试应用Cells__Font.ColorIndex_属性时遇到问题。

    以下 Microsoft KB 文章详细介绍了运行脚本的计算机具有除__en US__之外的区域设置时Excel自动化的错误。

    当我手动将区域设置和区域设置更改为“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”;请确保它存在并且可以设置。 在:行:10字符:29 +$sheet.cells.item(1,1).font。<<<colorndex=3

    有人知道如何解决这个问题吗(当然,除了将我的区域设置为__en US__之外!!)

    谢谢 -马克

    1 回复  |  直到 15 年前
        1
  •  1
  •   Keith Hill    15 年前

    从知识库文章中可以看出,除非您想在PC上安装mui for office,否则解决方法都包括将文化设置为en-us。好消息是,您可以在脚本中临时将文化设置为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 }