CSV - triky na Excel
Při otevírání CSV souboru se některé hodnoty některých sloupců špatně interpretují: Připomíná-li hodnota datum, tu se mylně zkonvertuje. Třeba CSV obsahuje 2018-01-30 a po tevření to je 30.1.2018. Podobně všechny údaje, které mohou být čísly jsou na čísla převedena. Tedy například vedoucí nuly jsou zahozeny. Podobně se čárky interpretují špatně. Jedním z triků je hodnotu, třeba 2018-01-30, zapsat do CSV jako ="2018-01-30" a donutit tak Excel, aby to chápal jako string, který následuje. Konverze CSV na Excel function csvToExcel($csv,$delimiter){ $a = New-Object -com "Excel.Application" $a.visible = $true $a.workbooks.add() $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@" $data = import-csv -delimiter $delimiter $csv; $array = ($data |ConvertTo-MultiArray).Value $starta = [int][char]'a' - 1 if ($array.GetLength(1) -gt 26) { $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta) } else { $col = [char]($array.GetLength(1) + $starta) } $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0)) $range.value2 = $array; $range.Columns.AutoFit(); $range.Rows.AutoFit(); $range.Cells.HorizontalAlignment = -4131 $range.Cells.VerticalAlignment = -4160 } function ConvertTo-MultiArray { param( [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)] [PSObject[]]$InputObject ) BEGIN { $objects = @() [ref]$array = [ref]$null } Process { $objects += $InputObject } END { $properties = $objects[0].psobject.properties |%{$_.name} $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count # i = row and j = column $j = 0 $properties |%{ $array.Value[0,$j] = $_.tostring() $j++ } $i = 1 $objects |% { $item = $_ $j = 0 $properties | % { if ($item.($_) -eq $null) { $array.value[$i,$j] = "" } else { $array.value[$i,$j] = $item.($_).tostring() } $j++ } $i++ } $array } } csvToExcel "storage_stats.csv" ";"
Aktualizováno dne 20180313. Komentář: info@jlabs.cz