Mam bazę danych, która śledzi sprzedaż widżetów według numeru seryjnego. Użytkownicy wprowadzają dane i liczbę nabywców oraz skanują każdy widżet do niestandardowego programu klienckiego. Następnie finalizują zamówienie. To wszystko działa bezbłędnie.
Niektórzy klienci chcą arkusza kalkulacyjnego zgodnego z Excelem zakupionych widżetów. Generujemy to za pomocą skryptu PHP, który wysyła zapytanie do bazy danych i wyprowadza wynik jako plik CSV z nazwą sklepu i powiązanymi danymi. Działa to również doskonale.
Po otwarciu w edytorze tekstu, takim jak Notatnik lub vi, plik wygląda następująco:
"Account Number","Store Name","S1","S2","S3","Widget Type","Date"
"4173","SpeedyCorp","268435459705526269","","268435459705526269","848 Model Widget","2011-01-17"
Jak widać, numery seryjne są obecne (w tym przypadku dwa razy, nie wszystkie kolejne numery seryjne są takie same) i są długimi ciągami liczb. Po otwarciu tego pliku w programie Excel wynik staje się:
Account Number Store Name S1 S2 S3 Widget Type Date
4173 SpeedyCorp 2.68435E+17 2.68435E+17 848 Model Widget 2011-01-17
Jak można zauważyć, numery seryjne są ujęte w podwójne cudzysłowy. Wydaje się, że Excel nie szanuje kwalifikatorów tekstowych w plikach .csv. Podczas importowania tych plików do programu Access mamy zerową trudność. Podczas otwierania ich jako tekstu nie ma żadnych problemów. Ale Excel bez wątpienia konwertuje te pliki na bezużyteczne śmieci. Próba instruowania użytkowników końcowych w sztuce otwierania pliku CSV za pomocą aplikacji innej niż domyślna staje się, powiedzmy, męcząca. Czy jest nadzieja? Czy istnieje ustawienie, którego nie mogłem znaleźć? Wydaje się, że tak jest w przypadku programów Excel 2003, 2007 i 2010.
Excel does not seem to respect text qualifiers in .csv files
- podwójne cudzysłowy nie są kwalifikatorami tekstu, po prostu dopuszczają przecinki w twoich danych, jeśli nie użyjesz przecinków w swoich danych, będą one bez znaczenia . Wszystkie dane w pliku CSV nie są wpisywane, więc program Excel może tylko zgadywać, że twój duży numer seryjny jest liczbą , i wtedy osiągniesz maksymalną dokładność programu Excel wynoszącą 15 cyfr, co skraca twoje liczby.