改变现有文化

时间:2014-02-24 13:17:06

标签: excel powershell culture

嘿伙计们,

起初:我对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。哪里是我的错?

1 个答案:

答案 0 :(得分:3)

如果您使用的是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    
    }    
}