2016-11-22 1 views
0

de script Powershell est la suivante:Excel .csv dans Powershell change constamment format des dates et numéros longs

$E = New-Object -ComObject Excel.Application 
$E.Visible = $false 
$E.DisplayAlerts = $false 
$wb = $E.Workbooks.Open($args[0]) 
$wb_name = fix-wbname($wb.Name) 
foreach ($ws in $wb.Worksheets) 
{ 
    $n = $wb.Name + "_" + $ws.Name + ".csv" 
    $n = Join-Path -Path $args[1] -ChildPath $n 
    $ws.SaveAs($n, 6) 
} 

Il fonctionne, mais Excel fait des choses stupides à la mise en forme de texte. Les dates au format AAAA-MM-JJ sont remplacées par M/J/AAAA. Le nombre 18446744073709500000 est changé en "1.84467E + 19"

Y at-il un moyen que je peux faire cela et avoir Excel juste exporter les valeurs comme ils sont?

Répondre

0

En général, non. Les dates dans Excel ne sont pas stockées en interne dans le même format que vous les voyez sur l'écran. Ils sont stockés dans une sorte de format de numérateur binaire qui est presque sans aucun doute le même format utilisé en interne dans Windows. Je n'ai pas étudié cela. Vous allez devoir savoir quelle conversion par défaut a lieu lorsque la conversion en csv a lieu. Cela pourrait être dépendant de la culture.

Les dépendances de culture peuvent être contrôlées par des paramètres dans Excel. Si les conversions en csv sont effectuées par Powershell, vous pouvez contrôler les dépendances de culture en spécifiant des paramètres facultatifs.

Désolé, c'est trop vague.