【问题标题】:Change current culture改变当前文化
【发布时间】:2014-02-24 13:17:05
【问题描述】:

大家好,

首先:我对强大的 powershell 世界很陌生 - 其次:我的问题是我想改变当前的文化来编辑 Excel 工作簿。

导致我对这个话题提出一个新问题的情况(是的,我知道有很多关于“改变当前文化”和“如何使用 powershell 编辑 excel 工作簿”的类似话题,别担心)是不是很多答案(如this)是一个很好的起点——但它对我不起作用!

所以这是我的实际问题: 我有一个脚本说

function Set-Culture ([System.Globalization.CultureInfo] $culture)
{
    [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
    [System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture
}

Get-Culture
Set-Culture('en-us')
Get-Culture

结果显示

LCID             Name             DisplayName                                                                                                      
----             ----             -----------                                                                                                      
3079             de-AT            German (Austria)                                                                                                 
3079             de-AT            German (Austria)

但是(正如您从上面看到的)我希望将当前的文化更改为 en-US。我的错在哪里?

【问题讨论】:

    标签: excel powershell culture


    【解决方案1】:

    如果您使用的是 PowerShell v2,则它是 MTA,这意味着 IIRC 您可以为每个管道调用获取不同的线程。 V1、V3 和 V4 是 STA,但是,我相信 PowerShell 在执行的某些点重置了文化。我相信类似以下的方法会更好:

    function Using-Culture
    {    
        param(
            [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
        $OldUICulture = [System.Threading.Thread]::CurrentThread.CurrentUICulture
        try {
            [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
            [System.Threading.Thread]::CurrentThread.CurrentUICulture = $culture        
            Invoke-Command $script    
        }    
        finally {        
            [System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture        
            [System.Threading.Thread]::CurrentThread.CurrentUICulture = $OldUICulture    
        }    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多