Jak przekonać program Excel do zaimportowania pliku CSV z przecinkami w niektórych polach zawartości?

13

Jak mogę przekonać Excela do importowania mojego pliku CSV ?

Plik

Mam plik podający się za CSV. Zawiera 10 pól, z których wszystkie są otoczone podwójnymi cudzysłowami (tak, nawet daty i liczby). 2 lub 3 z tych pól zawierają przecinki . Ale dane w tych polach są również otoczone cudzysłowami.

Problem

Kiedy próbuję otworzyć ten plik, Excel całkowicie ignoruje cytaty i zakłada, że ​​są one częścią danych.

Dzieli zatem pola zawierające przecinki na wiele kolumn.

To źle, przynajmniej dla mnie.

Przykładowe dane

„20051”, „”, „30 września 2009 02:53:23”, „SOMETEXT”, „”, „5000”, „2000000”, „2008 - 99999 - -99999, 2008 - unk - unk”, „191 - SOMETEXT - SOMETEXT, 192 - SOMETEXT - SOMETEXT, 193 - SOMETEXT - SOMETEXT, 194 - SOMETEXT - SOMETEXT, 195 - SOMETEXT - SOMETEXT, 196 - SOMETEXT - SOMETEXT "," 45 - SOMETEXT - EXTET - SOMETEXT - SOMETEXT, 141 - SOMETEXT - SOMETEXT ”
„20052”, „SOMETEXT”, „2009 Sep 08 07:56:50”, „SOMETEXT”, „”, „50000”, „5000000”, „2007 - 99999 - 99999”, „146 - SOMETEXT - SOMETEXT, 145 - SOMETEXT - SOMETEXT, 147 - SOMETEXT - SOMETEXT, 148 - SOMETEXT - SOMETEXT ”,„ 103 - SOMETEXT - SOMETEXT, 1131 - SOMETEXT - SOMETEXT ”

Co próbowałem?

Użyłem narzędzia importu do określenia ograniczników i tym podobnych, ale nie wydaje się to pomocne.

Próbowałem zmienić „Ogranicznik tekstu” z podwójnego cudzysłowu na „{none}” iz powrotem. Wydaje się, że wpływa to tylko na pierwszą kolumnę. Byłoby to rozsądne, gdyby można było kliknąć inne kolumny i zastosować to ustawienie do każdej z nich. Ale tak nie jest i wydaje się, że ma to działać w różnych kolumnach.

Co jeszcze mogę spróbować?

Rory Becker
źródło
1
Która wersja programu Excel? I czy jest w pełni załatany?
harrymc
Widziałem to w 2002 i 2007 roku. Nie jestem pewien co do roku 2007, ale jestem całkiem pewien, że rok 2002 był w pełni aktualny
Rory Becker
Czy możesz podać link do pliku CSV? Czy też obniżona wersja, która pokazuje problem?
Josh Comley,
Dodano przykładowe dane powyżej
Rory Becker

Odpowiedzi:

13

Właśnie wypróbowałem szybki test, który odtworzył twój problem.

Utworzyłem 1-wierszowy plik CSV w programie Word (który wykorzystuje inteligentne cytaty) jako test.csv „123”, „4,5,6” i otworzyłem go w programie Excel zgodnie z opisem.

Spróbuj zamienić „i” na „


Po pobraniu próbki zauważyłem, że Excel nie lubi odstępów między polami

np. zamiast

"20051", "", "2009 Sep 30 02:53:23", ...

chcesz

"20051","","2009 Sep 30 02:53:23",...

przyzwoita zamiana wyrażeń regularnych powinna być w stanie sobie z tym poradzić

Find:    |("[^"]*",) |
Replace: |\1|

(znaki potoku tylko dla wskazówek wizualnych)

Lub po prostu zmodyfikuj kod .Net, jeśli masz do niego dostęp ;-)

Ponadto, jak zauważył Arjan , może być również konieczne przekonwertowanie pliku z UTF-8 na ANSI, aby komórka A1 nie zawierała BOM i otaczających qoutes.

Natknąłem się na CSV zakodowane w Catch 22 ANSI nieobsługujących znaków międzynarodowych i CSV zakodowane w UTF, które nie są obsługiwane przez Excel; i nie znalazłem rozwiązania podczas utrzymywania CSV. Jeśli wymagana jest obsługa znaków międzynarodowych, formaty XML (lub natywne XLS) wydają się jedyną drogą - kosztem prostoty.

Społeczność
źródło
Nie dotyczy to inteligentnych cytatów. Ten plik został wygenerowany w celu użycia standardowych znaków cudzysłowu z programu napisanego w .Net.
Rory Becker,
Nie chciałem powiedzieć, że pliki UTF-8 powinny być kodowane inaczej. Ale podczas importowania UTF-8 rzeczywiście trzeba powiedzieć Excelowi, co to jest kodowanie. A UTF-8 jest ukryty gdzieś poniżej na tej długiej liście kodowań.
Arjan
Zaimportowałem wiele plików CSV zakodowanych w UTF-8. Jestem pewien, że gdyby mieli BOM.
Arjan
@lumbarious: Jesteś gwiazdą! Działa idealnie ... Nie mogę uwierzyć, że Excel nie może sobie z tym poradzić :(
Rory Becker
1
Tak, najwyraźniej spacje między polami całkowicie wprowadzają w błąd Excel 2011. Usunięcie spacji rozwiązuje problem, a także uniemożliwia Excelowi dołączanie cudzysłowów jako części danych. Domyślam się, że jest gdzieś specyfikacja, która mówi, że podwójne cudzysłowy ograniczają dane tylko wtedy, gdy znajdują się one bezpośrednio w przecinku.
Peter Gluck
9

Ten problem nęka mnie od wielu lat. Właśnie odkryłem rozwiązanie, o którym wspomniano w powyższych odpowiedziach, ale nie zostało to wyraźnie określone.

To miejsce po przecinku!

Nie importuje się do programu Excel;

HEADER1, HEADER2
"1,000", "2,000"

Podczas

HEADER1,HEADER2
"1,000","2,000"

Pracuje!

Mark Milbourne
źródło
3
Witamy w Super User! Ta odpowiedź została napisana w pomocny i jasny sposób. Dziękujemy za Twój wkład i mamy nadzieję, że pozostaniesz.
user1717828
YAAAS! Przyjęta odpowiedź ma prawdziwą odpowiedź na zakopane pytanie, w przeciwieństwie do tej odpowiedzi. Operacja nie używa inteligentnych cytatów.
dardub
2

Możesz także wypróbować CSVEd, który jest bezpłatny.

Alan B.
źródło
2

Kiedy próbuję otworzyć ten plik, Excel całkowicie ignoruje cytaty i zakłada, że ​​są one częścią danych. Dzieli zatem pola zawierające przecinki na wiele kolumn.

Jeśli przypadkowo nie używasz inteligentnych cytatów, takich jak sugerowany lumbarius , i zakładasz , że korzystasz z systemu Windows: może to wynikać z ustawień regionalnych. Po dwukrotnym kliknięciu lub użyciu opcji Plik »Otwórz, program Excel nie pyta o szczegóły, ale po prostu używa tych ustawień.

Mimo to ręczne wywoływanie funkcji importowania (tak jak ty) powinno działać, więc wątpię, aby zmiana ustawień regionalnych pomogła ...

Arjan
źródło
To bardziej przypomina komentarz niż odpowiedź ...
Metafaniel
Ta sugestia dokładnie rozwiązała mój problem! Wykonanie importu CSV (Dane> Z tekstu / CSV) nie działało zgodnie z oczekiwaniami, ale jeśli właśnie zrobiłem Plik> Otwórz w pliku CSV, działało. Potem mogłem po prostu skopiować / wkleić cały stół do mojego innego skoroszytu.
WOUNDEDStevenJones
1

Czy sprawdziłeś kodowanie znaków w swoim pliku? Spróbuj ustawić kodowanie znaków na UTF-8.

Za pomocą notatnika2 możesz zmienić kodowanie znaków.

Josh Comley
źródło
Notepad2 podaje, że kodowanie to „UTF8 z podpisem”
Rory Becker,
Następnie podczas importowania musisz przewinąć w dół na liście kodowania. UTF-8 jest ukryty gdzieś nisko na liście. (Nie trzeba używać UTF-8 pliki CSV, ale jako twój wkład już jest UTF-8 ty rzeczywiście trzeba powiedzieć Excel, co ma być używany. Należy pamiętać, że normalny cytat znaków zostanie zakodowany taki sam w ASCII, Zachodnia i UTF -8, ale może podpis (znak bajtowy) lub niektóre inne postacie psują się?)
Arjan
@Peter Po co zmieniać oficjalny link do Wikipedii? To w ogóle nie ma sensu? Nie chcemy zbytnio wysyłać ludzi, a to z pewnością nie wymaga edycji - szczególnie w przypadku posta dwuletniego.
slhck
1

Dodam tylko do odpowiedzi tutaj: skup się na PRZESTRZEŃ po WSPOMNIENIU w swoich plikach CSV. Excel nie lubi tych, jeśli zacytowałeś pola w swoich danych.

Polubienia programu Excel (4 kolumny danych):

a, b, c, d

Ale nie lubi (3 kolumny danych):

a, "b, c", d

To lubi (3 kolumny danych):

a,"b, c",d
DocOc
źródło
Właśnie trafiłem w ten problem. Waliłem głową w ścianę, aż dotarłem do tej notatki. To jest po prostu niesamowite.
Korzystam
1

Natknąłem się dziś na ten problem i znalazłem rozwiązanie, które zadziałało dla mnie.

Moje środowisko / kontekst: Mam stronę internetową z niektórymi (formalnymi) pytaniami, które zawierają zarówno cudzysłowy, jak i przecinki. Zarówno pytania, jak i odpowiedzi są wyciągane z bazy danych i zapisywane w pliku Excel w celu raportowania.

Miałem ten sam problem opisany powyżej: pytania zawierające zarówno cudzysłowy, jak i przecinki były dzielone na wiele kolumn w programie Excel.

Na moje potrzeby załatwiłem dwa pojedyncze cytaty zamiast podwójnego cudzysłowu .

-> na stronie internetowej dwa pojedyncze cytaty wyglądają jak podwójny cytat dla odwiedzających witrynę

-> W pliku Excel ponownie dwa pojedyncze cytaty wyglądają jak podwójny cytat dla użytkowników przeglądających dane raportu

Zdaję sobie sprawę, że to rozwiązanie nie będzie działać dla wszystkich, ale mam nadzieję, że pomoże komuś.

Gerald
źródło
1

Byłem w stanie to zrobić za pomocą:

a,b,c,"=""(1,2,3)"""

co daje cztery kolumny:

|  a  |   b   |   c   |   (1,2,3)   |
johnb
źródło
0

Inny sposób na zrobienie tego:

  1. Otwórz plik w LibreOffice lub OpenOffice Calc.
  2. Ustaw prawidłowe opcje importu, takie jak UTF-8, oddzielone przecinkami, ...
  3. Zapisz plik jako ods lub xls
  4. Otwórz nowy plik w programie Excel.

W ten sposób możesz ustawić prawidłowe kodowanie, takie jak UTF-8, które wiele (wszystkich?) Wersji programu Excel nie obsługuje poprawnie bez BOM i nie musisz się martwić o wyrażenie regularne, które może zastąpić tekst w polu i nie zauważasz tego.

12431234123412341234123
źródło