PowerShell работает офисное приложение в различных культурных проблемах - PullRequest
0 голосов
/ 02 ноября 2011

Здесь было описано, как запустить скрипт в другой культуре Using-Culture

Но для ком-объектов это не сработало.Пример: если вы создадите файл Excel с "= 1/3" в ячейке "A1" и попытаетесь получить значение этой ячейки из PS, используя другую культуру, результат будет таким же

function test {
    [Microsoft.Office.Interop.Excel.ApplicationClass]$excel = New-Object -ComObject "Excel.Application"
    $excel.visible = $false
    $excel.Application.DisplayAlerts = $false   

    $wbk = $excel.Workbooks.Open("d:\tmp\test.xls")

    $sheeet=$wbk.Worksheets.Item(1)
    $range = $sheeet.Cells.Item(1,1)
    Write-Host $sheeet.Range("A1").Text

    $excel.Quit()
    $wbk = $Null
    $sheeet = $Null
    $range = $Null
    $excel = $Null
    [GC]::Collect()     
}

Using-Culture -Culture en-US -Script {test} # 0,333333 But expect 0.333333
Using-Culture -Culture ru-RU -Script {test} # 0,333333

Длинная историяКороче говоря, как запустить офисное приложение в другой культуре? Спасибо!

Условия: Windows Xp SP3, Office 2003, PowerShell 2.0

1 Ответ

0 голосов
/ 02 ноября 2011

почему бы вам не попробовать этот путь

$value = $sheeet.Range("A1").Value()
$value.ToString([System.Globalization.CultureInfo]::GetCultureInfo("ru-ru"))

На самом деле $ value с COM marshalling является двойным, поэтому вы можете поместить его в виде строки на любом языке, который вам нужен.

...