Import Excel CSV traktuje cytowane ciągi liczb jako wartości liczbowe, a nie ciągi

13

Mam aplikację internetową, która eksportuje dane do pliku CSV. Oto jeden przykładowy wiersz odpowiedniego pliku CSV:

28,"65154",02/21/2013 00:00,"false","0316295","8316012,8315844","MALE"

Ponieważ nie mogę opublikować obrazu, muszę wyjaśnić wyniki w programie Excel. Pole „0316295” zostaje zamienione na liczbę, a wiodące 0 znika. „8316012,8315844” zostaje zinterpretowany jako jeden pojedynczy numer: 83 160 128 831 5844. To oczywiście nie jest zamierzony wynik.

Widziałem ludzi, którzy zalecają wiodący pojedynczy cytat w takich przypadkach, ale to też nie działa.

28,"65154",02/21/2013 00:00,"false","'0316295","'8316012,8315844","MALE"

Pojedynczy cytat jest zawsze widoczny w komórce w programie Excel, chociaż jeśli sam wprowadzę liczbę z wiodącym pojedynczym cytatem, pokazuje on tylko zamierzony ciąg, a nie pojedynczy cytat z ciągiem.

Wygląda na to, że importowanie nie jest tym samym, co pisanie.

Czy ktoś tu ma rozwiązanie?

Michael Oryl
źródło
Czy możesz go zaimportować przy użyciu LibreOffice lub czegoś podobnego? Właśnie zaimportowałem i otrzymałem: 28 65154 02/21/2013 00:00 false 0316295 8316012,8315844 MĘŻCZYZNA (jeśli możesz to przeczytać ...?)
FreudianSlip
To pytanie jest podobne i oferuje kilka dobrych rozwiązań: superuser.com/questions/234997/...
Brad Patton
@FreudianSlip Nie, nie możemy użyć rozwiązania innej firmy. Użytkownicy klikają przycisk „pobierz CSV”, a plik otwiera się w programie Excel. To środowisko, z którym mamy do czynienia. Naprawdę nie mogę tego skomplikować.
Michael Oryl
@Brad Przeczytałem wcześniej ten post, szukając rozwiązań. Tam właśnie otrzymałem opcję pojedynczej wyceny, której naprawdę nie lubię, ponieważ Excel wyświetla cytat w samej komórce po zaimportowaniu z CSV (nawet jeśli nie pokazuje go, jeśli wpiszesz to samo w sobie).
Michael Oryl
więc kontrolujesz przynajmniej aplikację internetową? jak zamierzasz wdrożyć rozwiązanie w sposób przejrzysty dla użytkowników? Zaktualizowałem moją odpowiedź, aby poprawnie obsługiwała wartości przecinkami
Alex P.

Odpowiedzi:

10

To powinno działać

28,"65154",02/21/2013 00:00,"false",="0316295","=""8316012,8315844""","MALE"
Alex P.
źródło
Nie, to zmienia wartość z dwiema liczbami. Otrzymujemy = "1234567 bez cudzysłowu. Działa jednak dla prostszych liczb.
Michael Oryl
1
jeśli kontrolujesz aplikację internetową, możesz zaimplementować eksport do formatu SYLK en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK) . ma znacznie lepszą kontrolę reprezentacji danych. jeśli nie - możesz łatwo zrobić skrypt konwertera
Alex P.
2
zaktualizowałem odpowiedź, aby poprawnie obsługiwała wartości przecinkami
Alex P.
To poprawnie obsługiwało wartości rozdzielane przecinkami. Dzięki.
Michael Oryl
dzięki. To rozwiązanie rozwiązało również problem z importowaniem liczb szesnastkowych. Excel zamienia na 00E30 (0 * 10 ^ 3) i wyświetla go jako notację sci (0,00E + 00). W rzeczywistości robi to samo "00e3"bez =. Ale ="00e3"działa idealnie. (otwieranie pliku CSV w programie Excel 2010)
MPag
12

Aby zachować początkowe zero, możesz ustawić format tej konkretnej kolumny na Tekst w Kreatorze importu tekstu.

  1. Uruchom Kreatora importu tekstu , przechodząc do karty Dane i klikając opcję Z tekstu .
  2. Wybierz plik CSV, który chcesz zaimportować.
  3. Wybierz Rozdziel i naciśnij Dalej .
  4. Odznacz kartę (domyślnie). Wybierz przecinek . Upewnij się, że kwalifikator tekstu jest ustawiony na ". Kliknij Dalej .
  5. Tutaj możesz określić formaty . Kliknij nagłówek kolumny, której wiodące zera (s) chcesz zachować. Wybierz tekst . (Patrz zdjęcie poniżej)

    wprowadź opis zdjęcia tutaj

  6. Kliknij Zakończ, a następnie wybierz odpowiednią lokalizację dla swoich danych. Przykładowy wynik:

    wprowadź opis zdjęcia tutaj

Edycja : Istnieje inny sposób ; wyeksportuj aplikację internetową do pliku .TXT rozdzielanego przecinkami zamiast .CSV (lub po prostu zmień rozszerzenie pliku eksportowanego po zapisaniu). Zmusza to program Excel do przejścia przez kreatora importu podczas otwierania pliku. Dodatkową zaletą jest to, że użytkownicy mogą modyfikować lub modyfikować oryginalne dane pierwotne.

Ellesa
źródło
1
Tak, to z pewnością prawda. Nie jest to po prostu zbyt wygodne dla użytkownika końcowego, gdy dla porównania wszystko, co muszą zrobić, to kliknąć link generatora CSV w naszej aplikacji internetowej, a Excel ładuje go automatycznie - aczkolwiek z wyżej wymienionymi problemami. Pliki CSV są ustawione na otwieranie w programie Excel, a program Excel nie oferuje w tym czasie żadnych opcji. Po prostu je ładuje. Doceniam to, że o tym mówisz.
Michael Oryl
1
Jest inny sposób, ale nie wiem, czy jest to możliwe w twoim przypadku: wyeksportuj aplikację internetową do przecinków .TXTzamiast .CSV(lub po prostu zmień rozszerzenie eksportowanego pliku). Ten rodzaj „zmusza” użytkowników do przejścia przez kreator importu podczas otwierania pliku.
Ellesa
To bardzo dobra uwaga. Dzięki za zwrócenie na to uwagi. Może być przydatny w przyszłości.
Michael Oryl
4

Excel traktuje wartości liczbowe zaczynające się od znaku tabulacji jak tekst.

<tabchar>000000100000200000,ABC,DEF

Pojawi się jako:

000000100000200000|ABC|DEF

| jest granicą komórki (dla celów ilustracyjnych). Na przykład, jeśli Twój system generuje plik CSV przy użyciu zestawu znaków utf-8, możesz dodać &#x0009;(Tab Char in Hex) przed wartością liczbową, aby zmusić program Excel do interpretowania go jako tekstu.

Madeyedexter
źródło
Usuń spację przed średnikiem w reprezentacji heksadecymalnej. Nie wiem, jak uciec od znaku Tabu Hex w odpowiedzi, więc celowo wpisałem go źle.
Madeyedexter
1
Zrobiłem ucieczkę. I nauczyłem się czegoś nowego, dziękuję. Muszę dodać to do mojego ulubionego tematu do pracy :)
nixda
3

Excel automatycznie wykryje format pola CSV, chyba że kolumna CSV ma ten format:

"=""Data Here"""

Działa to również w przypadku arkuszy Google

Chris Halcrow
źródło
0

Musisz użyć funkcji „Dane -> Pobierz dane zewnętrzne -> Importuj tekst z pliku” w programie Excel, aby wyświetlić go jako tekst. Oto wspomniany kreator importu tekstu @Kaze.

Jedynym sposobem, aby zmusić program Excel do wyświetlania liczb jako tekstu z danych wejściowych, bez konieczności wykonywania jakichkolwiek czynności przez użytkownika, jest wysłanie pliku programu Excel i określenie w nim „niestandardowego formatu liczb”. Polecam do tego celu bibliotekę eksportu XLS, ponieważ nie wydaje się to tak proste, jak dodanie wiersza tekstu konfiguracyjnego do pliku CSV.

Magne
źródło
0

wypróbuj funkcję czyszczenia dla pomieszanych wartości. Na przykład = czyste („12345678901234567890”). Działa dla mnie dla liczb, dat, godzin itp. Ostrzegam, że ponieważ nie jest to wcale celem tej funkcji, może przestać działać z nowymi wersjami itp.

Mark Prather
źródło