Jak przekonać Excela do interpretowania przecinka jako domyślnego separatora w plikach CSV?

95

Mam wiele plików .csv. Niektóre z nich są rozdzielane przecinkami, niektóre są rozdzielane tabulatorami (być może należy je nazwać .tsv ...)

csvPrzedłużenie pobiera związany z Excel, gdy jest zainstalowany program Excel. Jeśli jednak otworzę jeden z tych plików za pomocą programu Excel, wszystko zostanie zrzucone do tej samej kolumny, a przecinek nie będzie interpretowany jako separator.

Mogę zamiast Plik -> Importuj ..., wybrać plik i wybrać dokładny sposób interpretacji zawartości (ograniczniki, typy danych itp.) Ale przez większość czasu chcę po prostu patrzeć na plik przez wyraźne widok tabeli. Nie chcę przetwarzać go w programie Excel.

Czy istnieje sposób, aby Excel automatycznie interpretował separator i wyświetlał plik CSV jako prawidłową tabelę, gdy tylko zostanie otwarta? Potrzebuję tego, aby móc używać programu Excel jako szybkiej przeglądarki takich plików.

Podejrzewam, że musi być jakiś sposób, inaczej Excel nie skojarzyłby się z plikami CSV.

Szabolcs
źródło
Naprawdę rozumiem, że wybrana odpowiedź odpowiada na twoje pytanie, ale druga powinna zostać wyróżniona, ponieważ oferuje globalne rozwiązanie, które działa w trybie udostępniania acros przez e-mail, sieć itp.
Rafareino

Odpowiedzi:

81

Podczas otwierania plików CSV program Excel użyje systemowego ustawienia regionalnego zwanego w List separatorcelu określenia domyślnego ogranicznika, którego należy użyć.

Microsoft Excel otworzy pliki .csv, ale w zależności od regionalnych ustawień systemu może spodziewać się średnika jako separatora zamiast przecinka, ponieważ w niektórych językach przecinek jest używany jako separator dziesiętny. (z Wikipedii )


W systemie Windows możesz zmienić to List separatorustawienie w Regional and Language Optionssposób określony w witrynie pomocy technicznej pakietu Office :

Zmień separator w pliku tekstowym CSV

  1. Kliknij menu Start systemu Windows.
  2. Kliknij Panel sterowania.
  3. Otwórz okno dialogowe Opcje regionalne i językowe.
  4. Kliknij kartę Opcje regionalne.
  5. Kliknij Dostosuj / Dodatkowe ustawienia (Win10).
  6. Wpisz nowy separator w polu Separator listy.
  7. Kliknij dwa razy przycisk OK.

Uwaga : działa to tylko wtedy, gdy symbol dziesiętny nie jest również oznaczony przecinkiem (zgodnie z cytowaniem z Wikipedii powyżej). Jeśli tak, program Excel nie użyje przecinka jako separatora listy, nawet jeśli zostanie wybrany. W wielu regionach poza Stanami Zjednoczonymi przecinek jest domyślnym symbolem dziesiętnym.

W systemie Mac OS X to ustawienie wydaje się być wywnioskowane z ustawienia separatora dziesiętnego (w panelu Język i region w Preferencjach systemowych przejdź do Zaawansowane ). Jeśli separatorem dziesiętnym jest punkt, wówczas domyślnym separatorem CSV będzie przecinek, ale jeśli separatorem dziesiętnym jest przecinek, wówczas domyślnym separatorem CSV będzie średnik.

Jak sam powiedziałeś w komentarzu, użytkownicy komputerów Mac mogą alternatywnie szybko przejrzeć te pliki CSV. Jest to wtyczka do Quick Look o nazwie quicklook-csv, która obsługuje wykrywanie separatora.

zakinster
źródło
Dzięki, to ma sens. Myślę, że wtedy po prostu domyślnie nie interpretuje tabulatorów jako ograniczników (co ma również sens, ponieważ CSV oznacza wartości oddzielone przecinkami, ale ludzie w praktyce używają tabulatorów w CSV i muszę sobie z tym poradzić).
Szabolcs
@Szabolcs Excel nie będzie próbował wykryć ogranicznika podczas otwierania pliku CSV (przy użyciu file-> open lub explorer ), po prostu użyje ustawienia systemowego. Udaje mu się jednak automatycznie wykryć ogranicznik (tabulator, przecinek, średnik lub spację) podczas korzystania z funkcji importu .
zakinster
1
Twoja odpowiedź była ważna również w systemie OS X: to wciąż przecinek dziesiętny / przecinek powoduje „kłopot” (jak wspomniałeś w odpowiedzi).
Szabolcs
1
Późniejsza edycja: przeprosiny! to działa! Najwyraźniej trzeba ponownie uruchomić program i / lub wylogować się / -in ponownie, aby zastosować zmianę. Nie wiem dokładnie kiedy, ale krótko po mojej zmianie to nagle zadziałało.
mmo
1
W systemie Mac OS X nie zapomnij WYKONAĆ programu Excel po wprowadzeniu zmian. Program Excel pozostaje otwarty, jeśli zamkniesz tylko wszystkie otwarte arkusze. Kliknij Excel> Wyjdź z Excela lub po prostu naciśnij Command + Q i gotowe.
Paulo Pedroso,
94

Jeśli nie chcesz modyfikować formatu pliku i kierujesz się wyłącznie na program Excel, możesz skorzystać z następującej sztuczki programu Excel, aby Ci pomóc.

Dodaj nowy wiersz u góry pliku z tekstem "sep=,"(łącznie z cudzysłowami), aby program Excel otworzył plik z „,” jako separatorem listy.

Bardzo łatwo jest uniknąć zmiany ustawień regionalnych systemu Windows i uzyskać spójny wynik. Ale jest to specyficzne dla programu Excel.

użytkownik280725
źródło
1
Upewnij się, że używasz tego tylko do przeglądania pliku i nie modyfikujesz go, w przeciwnym razie możesz napotkać
Wouter
Nawet lepiej, jeśli musisz redystrybuować ten plik wśród innych, więc upewniasz się, że excel będzie w stanie zrozumieć plik, bez względu na ich konfiguracje. Zawsze używam csv, aby móc używać dowolnego systemu kontroli wersji do udostępniania i kolaboracji na tych plikach, ale zmagałem się z przecinkami kontra średnikami i zawsze ograniczałem wszystkich do zmiany konfiguracji, nigdy więcej. Wielkie dzięki!
Rafareino,
1
Sam na co?
NateS,
11

Nie potrzebujesz cudzysłowów sep=,- dopóki będzie to pierwsza linia pliku, będzie działać, przynajmniej w programie Excel 2016.

Odkryłem, że jeśli plik jest rozdzielany tabulatorami, sep=\tdziała dobrze, z cudzysłowami i bez nich.

Stephen Hemingway
źródło
4

Zaakceptowana odpowiedź jest poprawna, ale jestem osobą wizualną. Oto każdy krok w formacie zrzutu ekranu, jak to zrobić w systemie Windows 10.

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj

Sam B.
źródło
2
Bardzo przydatne! Pamiętaj tylko (jak już wspomniano powyżej), że List separatorzostaną zignorowane, jeśli użyje się tego samego symbolu Decimal symbol. Często znajdziesz go ,jako symbol dziesiętny, więc pamiętaj, aby zmienić go na coś innego (np. .) Podczas ustawiania List separatorna ,.
Dirk
1

Jeśli separator w ustawieniach regionalnych nie jest przecinkiem, ale średnikiem (separatorem holenderskim), zmień nazwę pliku CSV na plik TXT. Kliknij plik TXT prawym przyciskiem myszy, wybierz „Otwórz za pomocą” i wybierz „Excel”. W programie Excel wybierz pierwszą kolumnę, wybierz dane na wstążce i rozdziel tekst na kolumny.

LUB

Zainstaluj LibreOffice i otwórz plik CSV za pomocą LibreOffice Calc.

Eric VDB
źródło
1

Miałem .csvplik z separatorem ;i ustawieniami regionalnymi ustawionymi na Separator list ;. Jednak program Excel nadal nie analizował kolumn.

wprowadź opis zdjęcia tutaj

Okazało się, że jest to problem z kodowaniem. Pliki zostały wyeksportowane z SQL Server Management Studio 2005 i zostały zakodowane UCS-2 LE BOM. Za pomocą Notepad ++ przełączyłem kodowanie UTF-8i wszystko zaczęło działać.

Ogglas
źródło
0

Sprawdź plik CSV w prostym edytorze, takim jak Notatnik, aby sprawdzić, czy jest on prawidłowo sformatowany.

Dodałem tę odpowiedź po rozwiązaniu głupiego błędu, w którym pliki CSV utworzone za pomocą VB nie były otwierane z osobnymi kolumnami w programie Excel. Odkryłem, że sposób, w jaki napisałem linie, owinął każdy wiersz cudzysłowem. Excel ukrył cudzysłowy i pokazał cały wiersz w kolumnie A, sprawiając, że wyglądał, jakby ignorował moje separatory przecinków.

edj
źródło
0

najlepszym sposobem będzie zapisanie go w pliku tekstowym z rozszerzeniem csv

Sub ExportToCSV()
    Dim i, j As Integer
    Dim Name  As String

    Dim pathfile As String


    Dim fs As Object
        Dim stream As Object

        Set fs = CreateObject("Scripting.FileSystemObject")
    On Error GoTo fileexists

    i = 15
    Name = Format(Now(), "ddmmyyHHmmss")
    pathfile = "D:\1\" & Name & ".csv"

    Set stream = fs.CreateTextFile(pathfile, False, True)

fileexists:

    If Err.Number = 58 Then
        MsgBox "File already Exists"
        'Your code here
        Return
    End If
    On Error GoTo 0

    j = 1
    Do Until IsEmpty(ThisWorkbook.ActiveSheet.Cells(i, 1).Value)

        stream.WriteLine (ThisWorkbook.Worksheets(1).Cells(i, 1).Value & ";" & Replace(ThisWorkbook.Worksheets(1).Cells(i, 6).Value, ".", ","))

        j = j + 1
        i = i + 1
    Loop

stream.Close

End Sub
AzizD
źródło
0

W przypadku języka holenderskiego miałem problem polegający na tym, że program Excel 2008 w systemie Windows 7 nie był zgodny z RFC4180:

„Pola zawierające podział wiersza (CRLF), podwójne cudzysłowy i przecinki powinny być ujęte w cudzysłowy.”

Plik oddzielony przecinkami poprawnie zawierał pola z przecinkiem (holenderski separator dziesiętny) ujęte w podwójne cudzysłowy. W języku niderlandzkim separatorem dziesiętnym jest separator ,listy, ;więc Excel nie może odczytać pliku ,używanego dla obu (nawet po jawnej zmianie separatora listy na ,Panel sterowania).

Dane wejściowe wyglądają następująco:

"06-07-2017 17:03:18","********",0:01:04,Uitgaand,"0,1879","0,2273","0,0395",21

Rozwiązanie zostało podane przez @ user280725:

Użyj Notatnika, aby wstawić jako pierwszy wiersz:

sep=,

(Oznacza to, że uwaga użytkownika @zakinster w jego rozwiązaniu nie musi już obowiązywać).


Ciekawe: jeśli plik csv nadal jest ładowany, jeśli teraz ustawisz ustawienia regionalne na angielski w USA w Panelu sterowania i zapiszesz plik, zostanie on przekonwertowany na format angielski (przecinek jako separator listy i kropka jako separator dziesiętny).

Paul Ogilvie
źródło