Chociaż staram się tego unikać, czasami muszę otworzyć plik CSV w programie Excel. Kiedy to robię, formatuje kolumny zawierające liczby, co czyni je bezużytecznymi dla moich celów. O ile wiem, jedynym sposobem, aby temu zapobiec podczas importu, jest zmiana nazwy pliku, aby rozszerzenie nie było .csv i użycie kreatora importu do określenia formatu każdej kolumny osobno. W przypadku plików z 50–60 kolumnami jest to niepraktyczne.
Ponieważ każda odpowiedź na to często zadawane pytanie w Internecie sugeruje albo jakiś sposób konwersji sformatowanych liczb z powrotem po otwarciu pliku (co nie działa dla mnie - chcę rozwiązać ogólny problem, a nie kilka konkretnych przypadków) lub ręcznie wybierając typ formatu każdej kolumny (czego nie chcę robić), szukam sposobu na ustawienie globalnych preferencji lub stylu, tak aby wszystkie kolumny wszystkich otwieranych plików CSV były zawsze formatowane jako tekst. Wiem także o „zbrojeniu” liczb za pomocą cudzysłowów, ale pliki, które otrzymuję, nie są takie i miałem nadzieję uniknąć konieczności wstępnego przetwarzania plików, aby Excel ich nie zepsuł.
Czy istnieje sposób, aby to zrobić konkretnie : zawsze formatuj wszystkie kolumny w otwartych plikach CSV jako tekst, bez ręcznego wybierania każdej kolumny za każdym razem podczas importu?
Korzystam z programu Excel 2003, ale wezmę odpowiedzi na 2007, jeśli o tym wiesz.
źródło
Odpowiedzi:
To działa:
Stosowanie:
Plik rozdzielany przecinkami jest teraz otwarty jako arkusz programu Excel ze wszystkimi kolumnami sformatowanymi jako tekst.
Pamiętaj, że kreator @ Wetmelon działa dobrze, ale jeśli otwierasz wiele plików, możesz, podobnie jak ja, zmęczyć się za każdym razem, przewijając do kolumny 60, aby ją kliknąć z wciśniętym klawiszem Shift.
EDIT @GSerg stwierdza w komentarzu poniżej, że to „nie działa” i „zjada spacje i zera wiodące”. Przytoczę komentarz do pytania, które jest bardziej opisowe:
Powyższy kod „działa”, ale zostaje zabity przez to niedorzeczne zachowanie Excela. Niezależnie od tego, w jaki sposób go wycinasz, utknąłeś przy zmianie rozszerzenia na coś innego niż „.csv”, przepraszam! Po tym jesteś w domu wolny.
źródło
Workbooks.OpenText
ma swoje wady z założenia (patrz moja odpowiedź poniżej). UżyjQueryTables
zamiast tego.Jak otwierać pliki CSV w programie Excel
Dobry sposób
Excel → Dane → Uzyskaj dane zewnętrzne → Wybierz wszystkie kolumny za pomocą Shifti wybierz Tekst
Upside: traktuje wszystkie wartości poprawnie jako tekst bez wyjątku
Wada: więcej kroków niż zwykłe podwójne kliknięcie
Zła droga
Otwórz plik CSV za pomocą podwójnego kliknięcia lub Excel za pomocą okna dialogowego
Wada: wewnętrzna procedura obsługi CSV w programie Excel błędnie interpretuje wartości z interlinią
-
lub=
znakiem jako formułą, a nie tekstemWada: utracisz zera wiodące z wartości binarnych, na przykład z
0001
powodu automatycznie wykrytego formatu kolumny programu ExcelDobry sposób (dla VBA)
Użyj QueryTables (odpowiednik VBA
Get external data
) → Przykładowy kodUpside: traktuje wszystkie wartości poprawnie jako tekst bez wyjątku
Wada: Nieco więcej kodu niż
OpenText
metodyZły sposób (dla VBA)
Użyj
Workbooks.OpenText
metody → Przykładowy kodWada: ta metoda nadal wykorzystuje wewnętrzną procedurę obsługi importu CSV programu Excel ze wszystkimi jej wadami
Wada: Dodatkowo
fieldinfo
parametr parametruOpenText
jest ignorowany, jeśli rozszerzenie to CSV. Zwykle ten parametr pozwala wybrać każdy format kolumny, ale nie w przypadku rozszerzenia CSV. Możesz przeczytać więcej na temat tego zachowania na Przepełnienie stosuTymczasowa zmiana nazwy rozszerzenia źródła z CSV na TXT, a następnie powrót do CSV jest poprawnym obejściem, jeśli masz pełną kontrolę nad plikiem źródłowym
Dodatkowe metody
Jeśli masz dostęp do źródła, które tworzy plik CSV, możesz zmienić składnię CSV.
Każdą wartość należy zawrzeć w podwójnych cudzysłowach i poprzedzić znakiem równości, np.
="00001"
Lub wstawić tabulator do każdej wartości. Oba sposoby wymuszą na Excelu traktowanie wartości jako tekstuOryginalna treść CSV
CSV w programie Excel po otwarciu podwójnym kliknięciem
Zwróć uwagę, że linia 2 (metoda podwójnego cudzysłowu) i linia 3 (metoda tabulatorów) nie są zmieniane przez program Excel
Otwórz CSV w Notatniku i skopiuj i wklej wszystkie wartości do Excela. Następnie użyj Dane - Tekst do kolumnMinus: Tekst w kolumnach do zmiany formatów kolumn z ogólnego z powrotem na tekst daje niespójne wyniki. Jeśli wartość zawiera
-
znaki otoczone (np. „= E1-S1”), program Excel próbuje podzielić tę wartość na więcej niż jedną kolumnę. Wartości znajdujące się bezpośrednio w tej komórce mogą zostać nadpisane(zachowanie tekstu na kolumny zostało zmienione gdzieś pomiędzy Excel 2007 i 2013, więc już nie działa)
Dodatek Excel do otwierania plików CSV i importowania wszystkich wartości jako tekstu
To jest wtyczka programu Excel, która upraszcza działania importu CSV.
Główna zaleta: to rozwiązanie dostępne za jednym kliknięciem i wykorzystuje
QueryTables
tę samą kuloodporną metodę uzyskiwania danych zewnętrznychInstalacja
%appdata%\Microsoft\AddIns
File tab → Options → Add-Ins → Go To
i wybierzImportCSV.xla
File tab → Options → Trust Center → Trust Center Settings → Macro Settings → Enable all macros
Zauważysz nową pozycję paska menu o nazwie Dodatki i użyjesz tego przycisku, aby szybko otworzyć pliki CSV bez konieczności przechodzenia przez okno dialogowe Importuj
Skrypt PowerShell do otwierania plików CSV bezpośrednio z Eksploratora Windows
Za pomocą skryptu PowerShell można otwierać pliki CSV i automatycznie przekazywać je do programu Excel. Skrypt po cichu używa metody importu tekstu Excela, która zawsze traktuje wartości jak tekst i, jako bonus, obsługuje kodowanie UTF-8
C:\my\folder\myScript.ps1
. (Uwaga rozszerzenie.ps1
)shell:sendto
» EnterTeraz możesz wybrać (wiele) plików CSV i otworzyć je w programie Excel za pośrednictwem
Right-click » SendTo » Excel
źródło
Możesz spróbować, otwierając najpierw plik .xlsx, a następnie tworząc połączenie danych i importując plik .csv. Wybierz rozdzielany przecinkami, a następnie wybierz opcję traktowania wszystkich kolumn jako tekstu zamiast „Ogólnego”.
Edycja: Och, nie w pełni przeczytałem pytanie. W kreatorze importu wybierz nagłówek pierwszej kolumny, który chcesz zaimportować jako tekst, przewiń do nagłówka ostatniej kolumny, a następnie Shift + kliknij nagłówek. Następnie wybierz opcję promieniową „Tekst”.
źródło
Sugestia Wetmelon działa (nawet z .CSV), jeśli wykonasz następujące czynności:
Wiem, że to więcej kroków, ale przynajmniej pozwala mi w ten sposób otwierać pliki CSV bez konieczności zmiany rozszerzenia
źródło
Uważaj!
Podczas korzystania z metody ręcznej „Excel → Dane → Pobierz dane zewnętrzne → Wybierz wszystkie kolumny i wybierz Tekst” ......
Spowoduje to ustawienie w kolumnach tylko tekstu „mającego dane w pierwszym rzędzie” (zazwyczaj wiersz nagłówka). Ten kreator nie pokazuje kolumn dalej po prawej stronie, które mogą zawierać dane poniżej, ale nie w pierwszym rzędzie. Na przykład:
Row1Col1, Row1Col2, Row1Col3
Row2Col1, Row2Col2, Row2Col3, Row2Col4
Nigdy nie zobaczysz kolumny 4 w kreatorze importu, więc nie będziesz mieć możliwości zmiany jej z ogólnego na format tekstowy przed importowaniem !!!!
źródło
Oto alternatywna procedura do kodu zamieszczonego powyżej przez Jean-François Corbett
Ta procedura zaimportuje plik csv do programu Excel ze wszystkimi kolumnami sformatowanymi jako Tekst
źródło
Jeśli zawsze importujesz te same dane (stały format rekordu, układ itp.), Możesz napisać makro Access za pomocą specyfikacji importu, a następnie zrzucić dane z powrotem do Excela. Zrobiono to razy. Innym sposobem, w jaki to zrobiłem, jest użycie VBA i wczytywanie danych do arkusza roboczego po jednym rekordzie i analizowanie go podczas odczytywania. O ile mi wiadomo, nie ma sposobu, aby ustawić domyślny format podczas importu w programie Excel, a nawet gdyby to możliwe, spowodowałoby to problemy z następnym typem pliku, który próbujesz przeanalizować.
źródło
Na prośbę, przesyłając mój komentarz jako odpowiedź (z dodaniem nieco więcej informacji):
Hej Skrypciarze napisał artykuł na blogu na temat importowania CSV do Excela, który może mieć dla Ciebie przydatne informacje. Zabawa z obiektem danych w programie PowerShell może pozwolić ci robić, co chcesz.
Chociaż w artykule wspomniano tylko o importowaniu danych do komórek, które mogą pozostawić format liczbowy, możliwe jest, że będziemy się bawić niektórymi właściwościami i metodami Excel ComObject, aby zmusić dane do wprowadzenia komórek jako surowy tekst (lub wymusić formatowanie komórek w tekst przed lub po imporcie).
źródło
Z nieznanych powodów, nawet jeśli jawnie podajesz formaty dla wszystkich kolumn, Excel zignoruje je, jeśli rozszerzenie pliku to CSV.
Niektóre opcje:
Utwórz zapytanie, aby zaimportować dane, jak sugeruje Wetmelon .
Wada: może brakować sterowników bazy danych CSV na komputerze 64-bitowym.
Użyj kodu Jean , ale włącz kopiowanie pliku do folderu tymczasowego i zmianę rozszerzenia kopii.
Wada: brak linku do oryginalnego pliku (zapisanie spowoduje zastąpienie kopii); będziesz musiał ręcznie usunąć kopię później. Nadal możesz ręcznie zapisać jako w stosunku do oryginalnego pliku CSV.
Otwórz plik CSV w programie Notatnik Ctrl+A, Ctrl+Cwklej do Excela, dane - Tekst jako kolumny, to jest to zwykły czarodziej gdzie można ustawić wszystkie kolumny do tekstu w jednym zamachem. To inny smak poprzedniej opcji, ponieważ ukrywa także cenne rozszerzenie z Excela.
Wada: ręczna.
Mają bardzo prostą pętlę VBA, która odczytuje cały plik do pamięci i umieszcza go na arkuszu, komórka po komórce.
Wada: wolniejsza, brzydka.
źródło
Jeśli dobrze rozumiem pytanie, można to łatwo rozwiązać za pomocą opcji transpozycji w Paste-Special, jak opisano tutaj .
źródło