ImportExcel
ImportExcel copied to clipboard
Number conversion
In EPPlus functions where number conversion is used like below, value of CurrentInfo may not work. Decimal separator makes difference. Enum value should be replaced with InvariantInfo
[Double]::TryParse($v, [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::CurrentInfo, [Ref]$number)
It looks like this
$number = $null
[Double]::TryParse('999.45', [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::CurrentInfo, [Ref]$number)
False
[Double]::TryParse('999,45', [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::CurrentInfo, [Ref]$number)
True
[Double]::TryParse('999.45', [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::InvariantInfo, [Ref]$number)
True
[Double]::TryParse('999,45', [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::InvariantInfo, [Ref]$number)
True
In my environment it works.
Test snippet for whom it may concern
function Use-Culture {
param (
[System.Globalization.CultureInfo]$culture = (throw "USAGE: Use-Culture -Culture culture -Script {scriptblock}"),
[alias('sb')][ScriptBlock]$scriptblock = (throw "USAGE: Use-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 $scriptblock
[System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture
} # END Use-Culture
$cultures = [System.Globalization.CultureInfo]::GetCultures([System.Globalization.CultureTypes]::AllCultures).name
'ar-IQ','de-DE','fr-FR','tr-TR','ru-RU','aa' | ForEach-Object {
Use-Culture $_ -sb {
$number = $null
Write-Host "`nCurrent culture: $_`n"
[Double]::TryParse('999.45', [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::CurrentInfo, [Ref]$number)
[Double]::TryParse('999.45', [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::InvariantInfo, [Ref]$number)
[Double]::TryParse('999,45', [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::InvariantInfo, [Ref]$number)
}
}
Current culture: ar-IQ
True
True
True
Current culture: de-DE
True
True
True
Current culture: fr-FR
False
True
True
Current culture: tr-TR
True
True
True
Current culture: ru-RU
False
True
True
Current culture: aa
True
True
True
UPDATE
Test your environment
Use-Culture (Get-Culture).Name -sb {
$number = $null
Write-Host "`nCurrent culture: $culture`n"
[Double]::TryParse('999.45', [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::CurrentInfo, [Ref]$number)
[Double]::TryParse('999.45', [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::InvariantInfo, [Ref]$number)
[Double]::TryParse('999,45', [System.Globalization.NumberStyles]::Any, [System.Globalization.NumberFormatInfo]::InvariantInfo, [Ref]$number)
}
Thanks for laying that out
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.