Powstrzymaj Excela przed automatyczną konwersją niektórych wartości tekstowych na daty


526

Czy ktoś wie, czy istnieje token, który mogę dodać do mojego pliku CSV dla określonego pola, aby program Excel nie próbował przekonwertować go na datę?

Próbuję napisać plik .csv z mojej aplikacji, a jedna z wartości zdarza się wyglądać na tyle, że Excel automatycznie konwertuje go z tekstu na datę. Próbowałem umieścić wszystkie moje pola tekstowe (łącznie z tym, które wyglądają jak data) w podwójnych cudzysłowach, ale to nie działa.


120
Tak, na przykład, gdy plik z 10000 nazwami użytkowników ma taki, jak „kwiecień 25”, który jest konwertowany na datę i ostatecznie przetwarzany jako „kwiecień-25”, co powoduje błąd „nie znaleziono nazwy użytkownika”, ponieważ nie spodziewaj się, że Excel konwertuje pojedynczą wartość na datę, 4000 rekordów do pliku, pozostawiając resztę tekstu. Jaki słaby kod odczytu CSV; tak naprawdę, czy nie powinno odgadnąć typu na podstawie pierwszych X rekordów i pozostać przy nim? Lub zostaw cały tekst. Jeśli chcę sformatować jako „ogólne”, mogę to wybrać później. Zakładając „ogólne” od samego początku, ryzykuje to uszkodzenie danych tekstowych.
Triynko

Miałem problem podczas kopiowania i wklejania. Aby wyszukać wszystkie rozwiązania, wybierz kolumnę docelową, ustaw format na ciąg / tekst, a następnie skopiuj źródło i wykonaj specjalną wklej (prawym przyciskiem myszy) z „tylko wartościami”. Zachowuje wartości, bez formatowania daty.
Kai Noack,

84
Chcę tylko dodać, że uważam to zachowanie programu Excel za poważną wadę. Co z wszystkimi osobami, które nie mają luksusu, aby zmienić zawartość pliku csv przed importowaniem do programu Excel? A co z ludźmi, którzy nie zdają sobie sprawy z tego problemu, dopóki nie wprowadzą wielu innych zmian w pliku CSV? Sprawia, że ​​praca z plikami CSV w programie Excel jest bałaganem.
robguinness

Czy używasz DatatableJS? Ponieważ już wiem, jak to zrobić za pomocą tego interfejsu API. Jeśli potrzebujesz, możesz go znaleźć tutaj: stackoverflow.com/a/36142043/4241058
Richard Rebeco

11
Wszystkie te rozwiązania, aby korzystać z Plik -> Otwórz -> Importuj pracę są dla nas w porządku, ponieważ wiemy, co robimy, ale jest to bezużyteczne dla innych 99,5% świata, którzy nie rozumieją nawigacji w systemie plików z / w / an podanie. Widzą plik, aby go użyć, kliknij go dwukrotnie. Spędziłem 25 lat ucząc ludzi, jak korzystać z aplikacji biurowych i pisząc kod, który generuje dane dla wspomnianych aplikacji biurowych, a używanie / application / do szukania pliku, który ma być użyty, jest prawie niemożliwe.
user2624417,

Odpowiedzi:


355

Przekonałem się, że umieszczenie znaku „=” przed podwójnymi cudzysłowami pozwoli osiągnąć to, czego chcesz. Zmusza dane do bycia tekstem.

na przykład. = „2008-10-03”, = „więcej tekstu”

EDYCJA (zgodnie z innymi postami) : z powodu błędu Excel 2007 zauważonego przez Jeffiekinsa, należy skorzystać z rozwiązania zaproponowanego przez Andrew :"=""2008-10-03"""


12
Akceptuję tę odpowiedź, ponieważ 1) mój plik csv będzie używany tylko przez program Excel, i 2) to jest do księgowości i nie może mieć „na początku”, i 3) nie chcę, żeby musiały to robić import. Chcę tylko, żeby otworzyli csv.

5
Świetny! Ale ze względu na Excel 2007 bug użyć rozwiązanie zaproponowane przez Andrzeja : "=""2008-10-03""". Zaktualizowano wpis.
TMS

1
To nie działa dla mnie w programie Excel 2010, jeśli tekst jest za długi :(
steve

7
Dzieje się tak dlatego, że gdy Excel widzi znak „=”, decyduje się ocenić wyrażenie po nim. W tym przypadku wyrażenie jest po prostu literałem ciągu, a wartością literału ciągu jest treść ciągu. W ten sposób cudzysłowy magicznie znikają. Możesz umieścić = 1 + 2 + 3 i uzyskać wartość 6 po imporcie CSV. Sama formuła nie jest niszczona w procesie importowania.
lokori

4
Jest duży problem z tym podejściem - jeśli otworzysz plik w programie Excel i edytujesz, a następnie zapiszesz i otworzysz ponownie wszystkie te „znikają”
ACV

150

Wiem, że to stare pytanie, ale problem nie zniknie wkrótce. Pliki CSV są łatwe do wygenerowania z większości języków programowania, raczej małe, czytelne dla człowieka w chrupku dzięki zwykłemu edytorowi tekstu i wszechobecne.

Problem dotyczy nie tylko dat w polach tekstowych, ale wszystko , co liczbowe, również jest konwertowane z tekstu na liczby. Kilka przykładów, w których jest to problematyczne:

  • Kody pocztowe / pocztowe
  • numer telefonu
  • rządowe numery identyfikacyjne

które czasami mogą zaczynać się od jednego lub więcej zer (0), które są wyrzucane po przekształceniu na numeryczne. Lub wartość zawiera znaki, które można pomylić z operatorami matematycznymi (jak w datach: /, -).

Dwa przypadki, że mogę myśleć, że rozwiązanie „poprzedzenie =”, jak wspomniano wcześniej, może nie być idealne jest

  • gdzie plik może zostać zaimportowany do programu innego niż MS Excel (przychodzi mi na myśl funkcja korespondencji seryjnej MS Word),
  • gdzie czytelność dla człowieka może być ważna.

Mój hack do obejścia tego

Jeśli jeden pre / dopisuje do wartości znak nienumeryczny i / lub nie-datę, wartość zostanie rozpoznana jako tekst i nie zostanie przekonwertowana. Znak niedrukowalny byłby dobry, ponieważ nie zmieni wyświetlanej wartości. Jednak zwykły stary znak spacji (\ s, ASCII 32) nie działa w tym przypadku, ponieważ zostaje odcięty przez program Excel, a następnie wartość nadal jest konwertowana. Ale istnieje wiele innych drukowania i przestrzeń niedrukujące znaki, które będzie działać dobrze. Najłatwiej jest jednak dołączyć (dodać po) prosty znak tabulacji (\ t, ASCII 9).

Korzyści z tego podejścia:

  • Dostępne z klawiatury lub z łatwym do zapamiętania kodem ASCII (9),
  • To nie przeszkadza w imporcie,
  • Zwykle nie przeszkadza to w wynikach korespondencji seryjnej (w zależności od układu szablonu - ale zwykle dodaje tylko spację na końcu wiersza). (Jeśli jest to jednak problem, spójrz na inne znaki, np. Spację o zerowej szerokości (ZWSP, Unicode U + 200B)
  • nie stanowi dużej przeszkody podczas przeglądania pliku CSV w Notatniku (itp.),
  • i można je usunąć przez znajdowanie / zamienianie w programie Excel (lub Notatniku itp.).
  • Nie musisz importować pliku CSV, ale wystarczy kliknąć dwukrotnie, aby otworzyć plik CSV w programie Excel.

Jeśli istnieje powód, dla którego nie chcesz używać tej karty, poszukaj w tabeli Unicode czegoś innego.

Inna opcja

może być generowanie plików XML, dla których pewien format jest również akceptowany do importowania przez nowsze wersje MS Excel i który pozwala na znacznie więcej opcji podobnych do formatu .XLS, ale nie mam z tym doświadczenia.

Istnieją więc różne opcje. W zależności od wymagań / aplikacji jedno może być lepsze od drugiego.


Dodanie

Trzeba powiedzieć, że nowsze wersje (2013+) MS Excel nie otwierają już CSV w formacie arkusza kalkulacyjnego - jeszcze jeden speedbump w swoim przepływie pracy, co czyni Excel mniej przydatnym ... Przynajmniej istnieją instrukcje, jak go obejść. Zobacz np. Ten Stackoverflow: Jak poprawnie wyświetlać pliki .csv w programie Excel 2013? .


6
Mam prawidłowe początkowe zera po dodaniu \tdo mojej postaci separacji ;... do cholery, MS Office, dlaczego to zajęło mi więcej niż 2 minuty, żeby to zrozumieć?
Morten Jensen

2
Dodanie \ t na końcu wszystkich wartości naprawdę załatwia sprawę. Jest to hackerskie obejście, ale w praktyce działa dobrze. Wolę to od sztuczki z formułą z równym „=”, ponieważ może to być trudne w przypadku innych narzędzi.
ocroquette

3
Nie ma wystarczającej liczby głosów, które mogłyby wyrazić moją wdzięczność za ciebie. Wyszukaj i zamień w notatniku ++ ',' do '\ t, \ t' (aby uwzględnić również pierwszą i ostatnią kolumnę) działa jak urok. Dzięki.
Asaf

1
W moim zapytaniu MySQL (dla wyjścia CSV przez PHP) użyłem CONCAT ('\ t', column_name). Wykonał także lewę. Dzięki!
Just Plain High

1
Świetny pomysł. Niestety, Numbers jest nieco „mądrzejszy” niż Excel i nie pasuje do tabulatora. Najlepszą alternatywą, jaką mogę wymyślić, jest wiodąca ', ponieważ jest to trochę dobrze rozumiane i niezbyt rozpraszające ... ale niewidzialne byłoby lepsze.
Heath Raftery,

101

Pracując nad rozwiązaniem Jarod i problemem poruszonym przez Jeffiekinsa, możesz go zmodyfikować

"May 16, 2011"

do

"=""May 16, 2011"""

6
Nie działa w programie Excel 2010, jeśli tekst jest dłuższy niż pewna długość.
steve

1
@Andrew, ta „poprawka” spowoduje problemy, jeśli będziesz potrzebować "wartości w dowolnym miejscu między datą.
Pacerier

8
Do Twojej wiadomości, jeśli zapiszesz plik Excel, = zniknie i wrócisz do kwadratu przy następnym otwarciu.
d512

Moje doświadczenie nie pasuje ani do Steve'a, ani do d512. Działa dla mnie w przychodzącym pliku .csv w programie Excel 2013 i po zapisaniu jako .xlsx nie jest przywracany. Wystarczająco łatwe, aby każdy mógł przetestować przy użyciu tego wiersza danych: „806676”, „Brak”, „41”, „=” „16 maja 2011 r.” „”, 100,00 ”,„ False ”
tbc0

1
@ tbc0 Spróbuj "806676","None","41","=""05-16-2011""","100.00","False"zamiast tego, a zobaczysz, że zapisanie i ponowne załadowanie powoduje utratę dzielonego tekstu.
NetMage 29.01.2019

65

Miałem podobny problem i to obejście pomogło mi bez konieczności edytowania zawartości pliku csv:

Jeśli masz możliwość nazwania pliku inną nazwą niż „.csv”, możesz nazwać go rozszerzeniem „.txt”, takim jak „Myfile.txt” lub „Myfile.csv.txt”. Następnie, gdy otworzysz go w Excelu (nie metodą przeciągnij i upuść, ale używając Plik-> Otwórz lub listy ostatnio używanych plików), Excel dostarczy Ci „Kreatora importu tekstu”.

Na pierwszej stronie kreatora wybierz „Rozdzielany” dla typu pliku.

Na drugiej stronie kreatora wybierz „,” jako separator, a także wybierz kwalifikator tekstu, jeśli otoczyłeś swoje wartości cudzysłowami

Na trzeciej stronie zaznacz każdą kolumnę osobno i przypisz każdemu typ „Tekst” zamiast „Ogólne”, aby program Excel nie bałaganował twoich danych.

Mam nadzieję, że to pomoże tobie lub komuś z podobnym problemem!


2
A tak przy okazji, nie jestem pierwszym, który to odkrył. powstanie.com/use-excel-read-csv-without-reformatting.php Na tej stronie internetowej znajduje się również przydatna instrukcja, która umożliwia kliknięcie z wciśniętym klawiszem Shift kolumny na trzeciej stronie kreatora, aby zaznaczyć je wszystkie razem przed przypisaniem każdego typu "Tekst".
rainerbit

Może to działać w przypadku wartości daty, ale wydaje się, że nie działa w przypadku rzeczy, które excel interpretuje jako wartości liczbowe. Jeśli ciąg zawiera wszystkie liczby i przecinki, format tekstowy będzie formatem liczb naukowych.
Michael - Where's Clay Shirky

3
działało to idealnie dla mnie i nie wymagało żadnych zmian w moim pliku, z wyjątkiem zmiany nazwy na .txt. Dziękuję Ci.
Kevin

1
Niestety program Excel pozwala to zrobić tylko dla pierwszych 6 kolumn. Jeśli potrzebujesz więcej, lepszym rozwiązaniem jest skopiowanie zawartości pliku csv, utworzenie i pusty plik programu Excel, zaznacz wszystkie kolumny / wiersze i ustaw typ na Tekst, a następnie wklej zawartość i użyj Dane | Tekst do kolumn
nachocab,

To najlepsze rozwiązanie i powinno zostać oznaczone jako odpowiedź.
Rob

28

OSTRZEŻENIE: W programie Excel '07 (przynajmniej) występuje błąd (inny): jeśli w zawartości pola występuje przecinek, nie analizuje on poprawnie = "pola, zawartości", ale umieszcza wszystko po przecinku w polu następujące pole, niezależnie od znaków cudzysłowu.

Jedynym obejściem, które znalazłem, które działa, jest wyeliminowanie =, gdy zawartość pola zawiera przecinek.

Może to oznaczać, że istnieją pewne pola, których nie można dokładnie przedstawić w „Excelu”, ale do tej pory ufam, że nikt nie jest zbyt zaskoczony.


Właśnie przetestowałem to w programie Excel 2007 i działa dla mnie poprawnie. Jeśli jednak przed cudzysłowami znajduje się spacja wiodąca, to nie analizuje poprawnie przecinka.
Sunny88

8
Według RFC 4180 nie wydaje się to być błędem. Prawidłowym sposobem cytowania pola jest cytowanie całego pola, a następnie podwójne cytowanie cytatów wewnętrznych. Więc "=" "pole, treść" "" tools.ietf.org/html/rfc4180
Peter Stephens

2
@PeterStephens, To nie działa, jeśli field, contentma "w sobie. Np."=""field, co""ntent"""
Pacerier

1
@Pacerier Prawdopodobnie osadzony cytat musi zostać podwójnie zacytowany, zamieniając się w """".
ErikE,

Mogę potwierdzić, że sugestia @ ErikE jest poprawna. W przypadku pola z wartością 1"2, jeśli zdecydujesz się użyć tej sztuczki (w przeciwieństwie do pozostawienia jej tak, jak "1""2"w pliku - program Excel już traktowałby to jako tekst), to końcowy poprawny ciąg w pliku CSV kierowanym na program Excel kończy się bycie "=""1""""2""".
Tao,

22

Podczas tworzenia ciągu do zapisania w moim pliku CSV w C # musiałem sformatować go w ten sposób:

"=\"" + myVariable + "\""

2
to również zadzwoniło do mnie w Railsach. Dzięki
Vieenay Siingh

3
Działa również na Javie
Shoyo

Pracował dla mnie w JavaScript przy użyciu Papa Parse.
wobsoriano

17

2018 r

Jedyne właściwe rozwiązanie, które działało dla mnie (i również bez modyfikacji CSV ).

Excel 2010:

  1. Utwórz nowy skoroszyt
  2. Dane> Z tekstu> Wybierz plik CSV
  3. W wyskakującym oknie wybierz przycisk opcji „Rozdzielany”, a następnie kliknij przycisk „Dalej>”
  4. Pola wyboru ograniczników: zaznacz tylko „Przecinek” i odznacz pozostałe opcje, a następnie kliknij „Dalej>”
  5. W „Podglądzie danych” przewiń w prawo, a następnie przytrzymaj klawisz Shift i kliknij ostatnią kolumnę (spowoduje to zaznaczenie wszystkich kolumn). Teraz w „Format danych kolumny” wybierz przycisk „Tekst”, a następnie kliknij „Zakończ”.

Excel office365: (wersja klienta)

  1. Utwórz nowy skoroszyt
  2. Dane> Z tekstu / CSV> Wybierz plik CSV
  3. Wykrywanie typu danych> nie wykrywaj

Uwaga: Excel office365 (wersja internetowa), ponieważ piszę to, nie będziesz w stanie tego zrobić.


3
Działa to bez uprzedniej zmiany plików CSV, więc myślę, że to powinna być poprawna odpowiedź.
Jack

To wygląda na poprawną odpowiedź. Miałem duże nadzieje. Ale w systemie MacOS (office365) nie mogę wybrać WSZYSTKICH kolumn: w oknie podglądu pokazanym w kreatorze importu tekstu nie ma przewijania w poziomie, więc mogę wybrać tylko widoczne kolumny. Próbowałem skrótów (CMD + A lub innych rzeczy), ale bezskutecznie. Opcja „nie wykrywaj” też nie istnieje. Jestem zdruzgotany.
normanius

Excel Office 365, wybierz Plik, Opcje, Dane. Istnieją pola wyboru, aby w razie potrzeby pokazać starsze kreatory importu danych.
Kurt Schultz

15

W programie Excel 2010 otwórz nowy arkusz. Na wstążce Dane kliknij „Pobierz dane zewnętrzne z tekstu”. Wybierz plik CSV, a następnie kliknij „Otwórz”. Kliknij Następny". Odznacz „Tab”, umieść znacznik wyboru obok „Przecinek”, a następnie kliknij „Dalej”. Kliknij dowolne miejsce w pierwszej kolumnie. Trzymając klawisz Shift, przeciągnij suwak w poprzek, aż będziesz mógł kliknąć ostatnią kolumnę, a następnie zwolnij klawisz Shift. Kliknij przycisk radiowy „tekst”, a następnie „Zakończ”

Wszystkie kolumny zostaną zaimportowane jako tekst, tak jak w pliku CSV.


1
Natrafiłem na ten sam problem, ale dokładne przestrzeganie instrukcji @ Roba zadziałałoby idealnie! Dziękuję
Milacay,

2
Asystent Data From Text niestety nie obsługuje komórek wieloliniowych. W przypadku napotkania takiego tekstu składającego się z wielu wierszy zapisuje on wszystkie wiersze po pierwszym w nowych wierszach, przerywając cały import. Prawidłowo interpretuje podziały linii tylko po otwarciu pliku CSV przez podwójne kliknięcie. Cholera, Microsoft ...
CodeManX

1
Niestety nie rozwiązuje to problemu losowej „pomocy” formatowania Excela - tekst DEC1 jest nadal zmieniany na datę Dec-01. To samo z tekstem RRRR-MM-DD przełączonym na DD / MM / RRRR. :(
Baracus

12

Wciąż problem w wydaniu Microsoft Office 2016, raczej niepokojący dla tych z nas, którzy pracują z nazwami genów, takimi jak MARC1, MARCH1, SEPT1 itp. Rozwiązanie, które okazało się najbardziej praktyczne po wygenerowaniu pliku „.csv” w języku R, które zostaną następnie otwarte / udostępnione użytkownikom programu Excel:

  1. Otwórz plik CSV jako tekst (notatnik)
  2. Skopiuj (ctrl + a, ctrl + c).
  3. Wklej go w nowym arkuszu programu Excel - wszystko wklei się w jednej kolumnie jako długie ciągi tekstowe.
  4. Wybierz / wybierz tę kolumnę.
  5. Idź do Dane- „Tekst do kolumn ...”, w otwartym oknie wybierz „rozdzielany” (dalej). Sprawdź, czy „przecinek” jest zaznaczony (zaznaczenie go pokaże już rozdział danych na kolumny poniżej) (dalej), w tym oknie możesz wybrać żądaną kolumnę i oznaczyć ją jako tekst (zamiast ogólnego) (Zakończ).

HTH


Wysiłek manualny również nie był dla mnie atrakcyjny. Jednak po wyczerpaniu wszystkich dostępnych możliwości ta była najbardziej niezawodna i niezawodna.
Ana Maria Mendes-Pereira

Niemniej jednak przetwarzanie wsadowe.
Ana Maria Mendes-Pereira

To właściwie najlepsza odpowiedź tutaj, która wymaga najmniej pracy. Żałuję, że nie możesz ustawić opcji wymuszającej nie analizowanie pliku.
rzuca

Możesz także zamienić wszystkie przecinki na tabulatory, a następnie automatycznie się rozgraniczą
rzutuje

10

Oto prosta metoda, której używamy w pracy podczas generowania pliku csv. Zmienia on nieco wartości, więc nie jest odpowiedni we wszystkich aplikacjach:

Dodaj spację do wszystkich wartości w pliku csv

To miejsce zostanie usunięte przez program Excel z liczb takich jak „1”, „2.3” i „–2.9e4”, ale pozostanie w datach takich jak „01/10/1993” i wartości logiczne jak „PRAWDA”, uniemożliwiając ich przekształcenie w wewnętrzne typy danych programu Excel.

Zapobiega również zapamiętywaniu podwójnych cudzysłowów przy wczytywaniu, więc niezawodny sposób tworzenia tekstu w pliku csv pozostaje niezmieniony przez NAWET JEŚLI JEŚLI jakiś tekst, taki jak „3.1415”, otacza go podwójnymi cudzysłowami I dodaje cały ciąg spacją, tzn. (używając pojedynczych cudzysłowów, aby pokazać, co wpiszesz) „3.1415”. Następnie w programie Excel masz zawsze oryginalny ciąg, z wyjątkiem tego, że jest on otoczony podwójnymi cudzysłowami i poprzedzony spacją, więc musisz uwzględnić te w dowolnych formułach itp.


To zadziałało dla mnie. Miałem pewne wartości, takie jak 1-1-1, które są automatycznie konwertowane na daty. Jak wspomniano, przestrzeń zostanie przeniesiona, więc wartość zostanie zmieniona, ale robię to na pasku podczas analizowania, więc dla mnie to nie jest wielka sprawa.
jacklin

Spacja nie działa już, aby zapobiec interpretacji daty lub usuwaniu wiodących zer. Ale "\xA0"zamiast tego możesz użyć niełamliwej spacji - to zadziała.
Doin,

8

(Zakładając Excel 2003 ...)

Podczas korzystania z Kreatora zamiany tekstu na kolumny w kroku 3 możesz dyktować typ danych dla każdej kolumny. Kliknij kolumnę w podglądzie i zmień źle działającą kolumnę z „Ogólne” na „Tekst”.


8
To doskonały wybór, gdybym mógł zmusić użytkownika do korzystania z procesu importowania.

To w rzeczywistości nie rozwiązuje problemu, ponieważ liczby w kolumnie TEKST zostaną przekonwertowane na LICZBY podczas eksportowania do
pliku

8

Jest to jedyny sposób, w jaki wiem, jak to zrobić bez bałaganu w samym pliku. Jak zwykle w programie Excel, nauczyłem się tego, godzinami uderzając głową o biurko.

Zmień rozszerzenie pliku .csv na .txt; to powstrzyma Excel przed automatyczną konwersją pliku po jego otwarciu. Oto jak to zrobić: otwórz program Excel w pustym arkuszu, zamknij pusty arkusz, a następnie Plik => Otwórz i wybierz plik z rozszerzeniem .txt. Zmusza to program Excel do otwarcia „Kreatora importu tekstu”, w którym zadaje pytania o to, jak chcesz interpretować plik. Najpierw wybierz separator (przecinek, tabulator itp.), A następnie (tutaj jest ważna część) wybierz zestaw kolumn kolumn i wybierz formatowanie. Jeśli chcesz dokładnie, co jest w pliku, wybierz „Tekst”, a Excel wyświetli tylko to, co jest między ogranicznikami.


Po prostu dobrze mi to działało w dniu 03.03.2015 r., Pracując z programem Excel dla komputerów Mac 2011 (wersja 14.4.8 150116), pracując z danymi w pytaniu SO awk- unikaj ponownego formatowania wartości podobnych do dat , gdzie problem dotyczy programu Excel niż awk, pomimo tytułu pytania.
Jonathan Leffler,

4

(EXCEL 2007 i późniejsze)

Jak zmusić program Excel, aby nie „wykrywał” formatów daty bez edycji pliku źródłowego

Zarówno:

  • zmień nazwę pliku na .txt
  • Jeśli nie możesz tego zrobić, zamiast otwierać plik CSV bezpośrednio w programie Excel, utwórz nowy skoroszyt, a następnie przejdź do
    Data > Get external data > From Text
    i wybierz plik CSV.

Tak czy inaczej, zostaną wyświetlone opcje importu, wystarczy wybrać każdą kolumnę zawierającą daty i powiedzieć programowi Excel, aby sformatował jako „tekst”, a nie „ogólny”.


4

To, co zrobiłem dla tego samego problemu, to dodanie następujących wartości przed każdą wartością csv: „=” „” i jednego podwójnego cudzysłowu po każdej wartości CSV, przed otwarciem pliku w programie Excel. Weźmy na przykład następujące wartości:

012345,00198475

Należy je zmienić przed otwarciem w programie Excel, aby:

"="""012345","="""00198475"

Po wykonaniu tej czynności każda wartość komórki pojawi się jako formuła w programie Excel, więc nie będzie sformatowana jako liczba, data itp. Na przykład wartość 012345 pojawia się jako:

="012345"

Innym podejściem jest przechowywanie numeru w pliku csv as 1234500198475E-8; w ten sposób dalsze obliczenia w programie Excel będą nadal możliwe.
bert bruynooghe

4

Żadne z oferowanych tutaj rozwiązań nie jest dobrym rozwiązaniem. Może to działać w indywidualnych przypadkach, ale tylko wtedy, gdy masz kontrolę nad ostatecznym wyświetlaniem. Weź mój przykład: moja praca tworzy listę produktów, które sprzedają do sprzedaży detalicznej. Jest to format CSV i zawiera kody części, niektóre zaczynają się od zera, ustawianych przez producentów (nie pod naszą kontrolą). Usuń początkowe zera, a faktycznie możesz dopasować inny produkt. Klienci detaliczni chcą listy w formacie CSV z powodu programów do przetwarzania zaplecza, które również są poza naszą kontrolą i różnią się w zależności od klienta, więc nie możemy zmienić formatu plików CSV. Bez prefiksu „=” ani dodanych zakładek. Dane w surowych plikach CSV są poprawne; problemy zaczynają się, gdy klienci otwierają te pliki w programie Excel. I wielu klientów tak naprawdę nie zna się na komputerach. Mogą prawie otworzyć i zapisać załącznik do wiadomości e-mail. Myślimy o dostarczeniu danych w dwóch nieco różnych formatach: jednym jako Excel Friendly (przy użyciu opcji zasugerowanych powyżej poprzez dodanie TAB, a drugim jako „master”. Ale może to być pobożne życzenie, ponieważ niektórzy klienci nie zrozumieją, dlaczego musimy to zrobić. W międzyczasie nadal wyjaśniamy, dlaczego czasami widzą „złe” dane w swoich arkuszach kalkulacyjnych. Dopóki Microsoft nie dokona właściwej zmiany, nie widzę w tym właściwej rozdzielczości, o ile nie ma się kontroli nad tym, jak użytkownicy końcowi użyj plików. Ale może to być pobożne życzenie, ponieważ niektórzy klienci nie zrozumieją, dlaczego musimy to zrobić. Tymczasem nadal wyjaśniamy, dlaczego czasami widzą „złe” dane w swoich arkuszach kalkulacyjnych. Dopóki Microsoft nie dokona właściwej zmiany, nie widzę w tym właściwej rozdzielczości, o ile nie ma się kontroli nad tym, jak użytkownicy końcowi korzystają z plików. Ale może to być pobożne życzenie, ponieważ niektórzy klienci nie zrozumieją, dlaczego musimy to zrobić. Tymczasem nadal wyjaśniamy, dlaczego czasami widzą „złe” dane w swoich arkuszach kalkulacyjnych. Dopóki Microsoft nie dokona właściwej zmiany, nie widzę w tym właściwej rozdzielczości, o ile nie ma się kontroli nad tym, jak użytkownicy końcowi korzystają z plików.


Jeśli dodatkowe miejsce po lewej stronie danych nie ma znaczenia, możesz rozwiązać problemy z programem Excel, przygotowując "\xA0"(nie przerywając miejsca) do danych.
Doin

3

W tym tygodniu spotkałem się z tą konwencją, która wydaje się być doskonałym podejściem, ale nigdzie nie mogę jej znaleźć. Czy ktoś to zna? Czy możesz podać źródło? Nie szukałem godzinami, ale mam nadzieję, że ktoś rozpozna to podejście.

Przykład 1: = („012345678905”) wyświetla się jako 012345678905

Przykład 2: = („1954-12-12”) wyświetla się jako 1954-12-12 , a nie 12/12/1954 .


2

To nie jest Excel. System Windows rozpoznaje formułę, dane jako datę i dokonuje autokorekty. Musisz zmienić ustawienia systemu Windows.

„Panel sterowania” (-> „Przełącz do widoku klasycznego”) -> „Opcje regionalne i językowe” -> karta „Opcje regionalne” -> „Dostosuj ...” -> karta „Liczby” -> A następnie zmień symbole zgodnie z tym, czego chcesz.

http://www.pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

Będzie działał na twoim komputerze, jeśli te ustawienia nie zostaną zmienione, na przykład na komputerze twoich klientów zobaczą daty zamiast danych.


2

Cześć, mam ten sam problem,

Piszę ten vbscipt, aby utworzyć kolejny plik CSV. Nowy plik CSV będzie zawierał spacje czcionek w każdym polu, więc program Excel zrozumie go jako tekst.

Tak więc tworzysz plik .vbs z kodem poniżej (na przykład Modify_CSV.vbs), zapisz go i zamknij. Przeciągnij i upuść oryginalny plik do pliku vbscript. Stworzy nowy plik z „SPACE_ADDED” do nazwy pliku w tej samej lokalizacji.

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing

2

Bez modyfikacji pliku csv możesz:

  1. Zmień opcję Formatuj komórki Excela na „tekst”
  2. Następnie za pomocą „Kreatora importu tekstu” zdefiniuj komórki csv.
  3. Po zaimportowaniu usuń te dane
  4. następnie wklej jako zwykły tekst

excel poprawnie sformatuje i oddzieli twoje komórki csv jako tekst sformatowany ignorując automatyczne formaty daty.

To głupie obejście, ale przed zaimportowaniem pokonuje modyfikowanie danych csv. Andy Baird i Richard niejako wymykali się tej metodzie, ale przeoczyli kilka ważnych kroków.


1

Wiem, że to stary wątek. Dla takich jak ja, którzy nadal mają ten problem przy użyciu pakietu Office 2013 za pośrednictwem obiektu com PowerShell, mogą skorzystać z metody opentext . Problem polega na tym, że ta metoda ma wiele argumentów, które czasem wzajemnie się wykluczają. Aby rozwiązać ten problem, możesz użyć metody invoke-namedparameter wprowadzonej w tym poście . Przykładem może być

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

Niestety właśnie odkryłem, że ta metoda w jakiś sposób psuje parsowanie csv, gdy komórki zawierają łamanie linii. Jest to obsługiwane przez csv, ale wydaje się, że implementacja mikroprocesorów jest błędna. W jakiś sposób nie wykrył też znaków specyficznych dla Niemiec. Nadanie jej właściwej kultury nie zmieniło tego zachowania. Wszystkie pliki (csv i skrypt) są zapisywane z kodowaniem utf8. Najpierw napisałem następujący kod, aby wstawić komórkę csv według komórek.

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

Ale to jest wyjątkowo wolne i dlatego szukałem alternatywy. Najwyraźniej program Excel umożliwia ustawienie wartości zakresu komórek za pomocą macierzy. Użyłem więc algorytmu na tym blogu, aby przekształcić plik CSV w wielowątkowy.

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true

    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

Możesz użyć powyższego kodu, ponieważ powinien on przekonwertować dowolny plik CSV na program Excel. Wystarczy zmienić ścieżkę do csv i znak separatora u dołu.


zbyt skomplikowane
rzuca

1

W moim przypadku plik „Sept8” w pliku csv wygenerowanym przy użyciu R został przekonwertowany na program „8-Sept” przez program Excel 2013. Problem został rozwiązany za pomocą funkcji write.xlsx2 () w pakiecie xlsx w celu wygenerowania pliku wyjściowego w formacie xlsx , które mogą być ładowane przez program Excel bez niechcianej konwersji. Tak więc, jeśli otrzymałeś plik csv, możesz spróbować załadować go do R i przekonwertować na xlsx za pomocą funkcji write.xlsx2 ().


Nie wiem, dlaczego twoja odpowiedź jest odrzucona. Jest to przydatne dla ludzi, którzy przynajmniej używają R. Ta odpowiedź pomogła mi. Dzięki :)
sriharsha KB

1

Obejście problemu za pomocą Dysku Google (lub Numbers, jeśli używasz komputera Mac):

  1. Otwórz dane w Excelu
  2. Ustaw format kolumny z niepoprawnymi danymi na Tekst (Format> Komórki> Liczba> Tekst)
  3. Załaduj plik .csv na Dysk Google i otwórz go za pomocą Arkuszy Google
  4. Skopiuj niepoprawną kolumnę
  5. Wklej kolumnę do Excela jako tekst (Edycja> Wklej specjalnie> Tekst)

Alternatywnie, jeśli korzystasz z komputera Mac w kroku 3, możesz otworzyć dane w Numbers.


To rozsądne rozwiązanie, a nie praca nad nim przez wiele godzin bez żadnej rozdzielczości.
imsrgadich

1

(EXCEL 2016 i nowsze wersje, tak naprawdę nie próbowałem w starszych wersjach)

  1. Otwórz nową pustą stronę
  2. Przejdź do zakładki „Dane”
  3. Kliknij „Z tekstu / CSV” i wybierz plik csv
  4. Sprawdź w podglądzie, czy Twoje dane są poprawne.
  5. W przypadku, gdy jakaś kolumna zostanie przekonwertowana na datę, kliknij „edytuj”, a następnie wybierz Tekst, klikając kalendarz na początku kolumny
  6. Kliknij „Zamknij i wczytaj”

0

Ok znalazłem prosty sposób na zrobienie tego w programie Excel 2003 do 2007. Otwórz pusty skoroszyt xls. Następnie przejdź do menu Dane, zaimportuj dane zewnętrzne. Wybierz plik csv. Przejdź przez kreatora, a następnie w „formacie danych kolumny” wybierz dowolną kolumnę, która musi zostać zmuszona do „tekstu”. Spowoduje to zaimportowanie całej kolumny jako formatu tekstowego, uniemożliwiając Excelowi próby traktowania określonych komórek jako daty.


0

Ten problem jest nadal obecny w Mac Office 2011 i Office 2013, nie mogę temu zapobiec. Wydaje się to takie podstawowe.

W moim przypadku miałem wartości takie jak „1–2” i „7–12” w pliku CSV poprawnie ujęte w cudzysłowy, to automatycznie konwertuje się na datę w programie Excel, jeśli spróbujesz później przekonwertować go na zwykły tekst, otrzymasz reprezentacja liczbowa daty, taka jak 43768. Dodatkowo formatuje ponownie duże liczby znalezione w kodach kreskowych i liczbach EAN do liczb 123E +, których nie można ponownie przekonwertować.

Odkryłem, że Arkusze Google na Dysku Google nie konwertują liczb na daty. Kody kreskowe zawierają przecinki co 3 znaki, ale można je łatwo usunąć. Bardzo dobrze radzi sobie z CSV, szczególnie w przypadku CSV MAC / Windows.

Może kiedyś kogoś ocalę.


0

ŁATWE ROZWIĄZANIE Właśnie dzisiaj to wymyśliłem.

  • Otwórz w programie Word
  • Zamień wszystkie myślniki na myślniki
  • Zapisz i zamknij
  • Otwórz w programie Excel

Po zakończeniu edycji możesz zawsze otworzyć go ponownie w programie Word, aby ponownie zastąpić myślniki myślnikami.


0

Robię to w przypadku numerów kart kredytowych, które ciągle przekształcają się w notację naukową: w końcu importuję plik .csv do Arkuszy Google. Opcje importu pozwalają teraz wyłączyć automatyczne formatowanie wartości liczbowych. Ustawiam wrażliwe kolumny na Zwykły tekst i pobieram jako xlsx.

To okropny przepływ pracy, ale przynajmniej moje wartości pozostały takie, jakie powinny być.


Jeśli przeszkadza, aby przeczytać niektóre z innych odpowiedzi, widać, że ktoś już zasugerował, to tutaj .
Laurel

Niepokoiłem się, dziękuję. Wskazuję, że automatyczny wybór formatowania jest nową częścią procesu importowania. Moja odpowiedź zapewnia bardzo konkretny przepływ pracy dla tych, którzy, podobnie jak ja, zostali zmuszeni do korzystania z Arkuszy w celu rozwiązania tego konkretnego problemu. Moim zdaniem zasługuje to na osobną odpowiedź. Niewielka korekta tonu może w rzeczywistości spowodować, że Twój komentarz zostanie zinterpretowany jako pomocny, co stanowi sedno tej rodziny witryn.
Brendonwbrown

Ale możesz po prostu użyć importu tekstu w programie Excel, aby zaimportować plik CSV i nie zawracać sobie głowy Arkuszami, jak zauważono w innych odpowiedziach.
NetMage

0

Zrobiłem to makro vba, które zasadniczo formatuje zakres wyjściowy jako tekst przed wklejeniem liczb. Działa idealnie dla mnie, gdy chcę wkleić wartości, takie jak 8/11, 23/6, 1/3 itd. Bez Excela interpretującego je jako daty.

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup

Columns(ActiveCell.Column).NumberFormat = "@"

Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

Jestem bardzo zainteresowany tym, czy działa to również dla innych ludzi. Przez jakiś czas szukałem rozwiązania tego problemu, ale nie widziałem szybkiego rozwiązania VBA, które wcześniej nie obejmowało wstawiania „przed tekstem wejściowym. Ten kod zachowuje dane w oryginalnej formie.


-1

Jeśli umieścisz odwrócony przecinek na początku pola, zostanie on zinterpretowany jako tekst.

Przykład: 25/12/2008staje się'25/12/2008

Możesz także wybrać typ pola podczas importowania.


9
Nie chcę „na początku moich danych”.

27
-1. Opcja „działa tylko, gdy zostanie wprowadzona bezpośrednio w programie Excel, ale nie działa w CSV - po zaimportowaniu miałbyś dodatkowy” znak w komórce programu Excel.
TMS

-1

Alternatywna metoda:

Konwertuj format kolumny, którą chcesz zmienić, na „Tekst”. Wybierz wszystkie komórki, które chcesz zachować, skopiuj. Bez odznaczania tych kolumn kliknij „Edytuj> Wklej specjalnie> Jako wartości”

Zapisz jako CSV. Pamiętaj, że musi to być ostatnia czynność, którą zrobisz z plikiem, ponieważ po ponownym otwarciu formatuje się on jako daty, ponieważ formatów komórek nie można zapisać w plikach CSV.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.