Jaka jest prawdziwa różnica między plikiem CSV programu Excel a standardowym plikiem CSV?
Na przykład, kiedy obsługują kolumny z podziałami linii w jednej komórce, w jaki sposób kodują ją inaczej?
Jaka jest prawdziwa różnica między plikiem CSV programu Excel a standardowym plikiem CSV?
Na przykład, kiedy obsługują kolumny z podziałami linii w jednej komórce, w jaki sposób kodują ją inaczej?
Odpowiedzi:
Zależy to absolutnie od tego, co definiujesz jako „standardowy” CSV. Jeśli o mnie chodzi, Excel przestrzega zasad określonych w RFC 4180 , „Wspólnym formacie i typie MIME dla plików CSV”.
Rozważ tabelę, w której pierwsza komórka w pierwszym rzędzie ma dwa podziały wiersza. W programie Excel wyglądałoby to tak:
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | col1, line1a | | |
| | col1, line1b | | |
| | col1, line1c | col2, row1 | col3, row1 |
| 2 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
W jaki sposób Excel to eksportuje? Zobaczmy - edytor tekstu wyświetli to:
"col1, line1a
col1, line1b
col1, line1c","col2, row1","col3, row1"
"col1, row2","col2, row2","col3, row2"
Niezbyt wyrafinowane. Wstawia znak powrotu karetki (szesnastkowy 0D
) w miejscu, w którym podział linii był w naszej komórce. Każda komórka jest otoczona podwójnymi cudzysłowami. Ponadto rzeczywiste rzędy są oddzielone znakiem powrotu karetki.
Aby przeanalizować to poprawnie, parser CSV musiałby to zrobić
Gdyby tak się nie stało, skończyłoby się czymś takim zniekształconym - zauważ, że teraz są cztery linie zamiast dwóch, ponieważ nie zignorował podziałów linii.
+---+---------------+------------+------------+
| | A | B | C |
+---+---------------+------------+------------+
| 1 | "col1, line1a | | |
| 2 | col1, line1b | | |
| 3 | col1, line1c" | col2, row1 | col3, row1 |
| 4 | col1, row2 | col2, row2 | col3, row2 |
+---+---------------+------------+------------+
Ale zobaczmy, co mówi RFC, może Excel zrobił to dobrze?
Pola zawierające podział wiersza (CRLF), podwójne cudzysłowy i przecinki powinny być ujęte w cudzysłowy.
Zgrabne, właśnie to zrobił Excel. Podsumowując, Excel wydaje się postępować zgodnie z zaleceniami „standardowego” pliku CSV. Przy odpowiednim parserze CSV powinien on także być w stanie czytać pliki Excel CSV.
Rozumiem z oryginalnej implementacji csv, że wszystkie pola tekstowe są ujęte w cudzysłowy i nie muszą być liczbami. Program Excel tego nie robi, a próba przesłania plików CSV wygenerowanych przez program Excel na platformy inne niż Microsoft nie działa. Jest to standardowe podejście Microsoft, ignoruj interoperacyjność i skup się na ślepym przestrzeganiu zasad. Podobnie stało się z IE, postępowali zgodnie z regułami html / css poprawnie dla atrybutów dopełnienia i marginesu i zignorowali fakt, że każda istniejąca strona i przeglądarka internetowa traktowali je inaczej. W rezultacie prawie każda strona internetowa ma teraz specjalne reguły dla IE. Uważam, że pliki csv tworzone przez program Excel są bezużyteczne i używam kolumny funkcji „konkatenacji”, aby ręcznie je samodzielnie utworzyć.