Excel CSV - format komórki liczbowej

86

Tworzę raport jako plik CSV. Kiedy próbuję otworzyć plik w programie Excel, zakłada on typ danych na podstawie zawartości komórki i odpowiednio go formatuje.

Na przykład, jeśli plik CSV zawiera

...,005,...

Następnie Excel pokazuje to jako 5. Czy istnieje sposób na zastąpienie tego i wyświetlenie 005?

Wolałbym coś zrobić z samym plikiem, aby użytkownik mógł po prostu dwukrotnie kliknąć plik CSV, aby go otworzyć.

Używam programu Excel 2003.

Sergey Stadnik
źródło
Zobacz to pytanie, aby uzyskać makro rozwiązanie tego problemu.
Adam Jensen
Obecnie istnieje wiele bibliotek do pisania w Excelu. Tworzenie plików .xlsx w wybranym języku powinno być dość łatwe. Jeśli z jakiegoś powodu użytkownicy nadal używają programu Excel 2003 (często, gdy zadawano to pytanie, ale miejmy nadzieję, że dzisiaj jest to mało prawdopodobne), dostępne są również opcje tworzenia plików .xls. Dla osób, które dziś natkną się na to pytanie, jest bardzo prawdopodobne, że nie musisz zadawać własnego.
John Y

Odpowiedzi:

129

Nie ma łatwego sposobu kontrolowania formatowania stosowanego przez program Excel podczas otwierania pliku .csv. Jednak poniżej wymieniono trzy podejścia, które mogą pomóc.

Moja preferencja to pierwsza opcja.

Opcja 1 - Zmień dane w pliku

Możesz zmienić dane w pliku .csv w następujący sposób ..., = "005" , ... Zostanie to wyświetlone w programie Excel jako ..., 005 , ...

Excel zachowa dane jako formułę, ale skopiowanie kolumny i użycie wklejania specjalnych wartości pozbędzie się formuły, ale zachowa formatowanie

Opcja 2 - Sformatuj dane

Jeśli jest to po prostu problem z formatem, a wszystkie dane w tej kolumnie mają trzy cyfry. Następnie otwórz dane w programie Excel, a następnie sformatuj kolumnę zawierającą dane w tym niestandardowym formacie 000

Opcja 3 - Zmień rozszerzenie pliku na .dif (format wymiany danych)

Zmień rozszerzenie pliku i użyj kreatora importu plików, aby kontrolować formaty. Pliki z rozszerzeniem .dif są automatycznie otwierane przez program Excel po dwukrotnym kliknięciu.

Krok po kroku:

  • Zmień rozszerzenie pliku z .csv na .dif
  • Kliknij dwukrotnie plik, aby otworzyć go w programie Excel.
  • Zostanie uruchomiony „Kreator importu plików”.
  • Ustaw „Typ pliku” na „Rozdzielany” i kliknij przycisk „Dalej”.
  • W sekcji Ograniczniki zaznacz „Przecinek” i kliknij przycisk „Dalej”.
  • Kliknij każdą wyświetloną kolumnę danych i wybierz „Format danych kolumny”. Kolumna o wartości „005” powinna mieć format „Tekst”.
  • Kliknij przycisk Zakończ, plik zostanie otwarty przez Excel w formatach, które określiłeś.
Robert Mearns
źródło
8
.dif nie działa na moim komputerze; ręczne otwieranie w programie Excel 2007 nie działało (ostrzegło mnie, że typ pliku był inny niż rozszerzenie) i wygląda na to, że .DIF jest powiązany z Quicktime na wielu komputerach. Po prostu do Twojej wiadomości :) W przeciwnym razie świetne wskazówki!
Nicholas
15
Myślę, że opcja 1 jest najlepsza, jeśli chcesz bezproblemowego wygenerowania pliku, który „po prostu działa” - tzn. otwiera się na komputerze użytkownika w programie Excel bez konieczności wykonywania dodatkowej pracy.
Kip
Mam ten sam problem i żadne z powyższych nie jest właściwe. Myślę, że mógłbym wyeksportować jako XML i użyć XSLT, aby przejść do CSV. Potrzebuję, aby plik CSV był poprawny, aby można go było zaimportować do innej aplikacji
Matt
1
Zwróć uwagę, że opcja 1 nie zawsze jest dobra, jeśli masz komórkę, powiedzmy „1E02, dowolny tekst”, a następnie umieścisz równość na początku, program Excel wyobrazi sobie, że wprowadziłeś formułę. Najpierw formuła będzie błędna, ale po drugie, a co najważniejsze, podzieli twój tekst na 2 komórki.
ghiscoding
1
Dzięki za opcję 1. Naprawiono mój problem z notacją naukową bez dodatkowej pracy.
NaN
28

Nie używaj CSV, użyj SYLK.
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

Daje znacznie większą kontrolę nad formatowaniem, a program Excel nie będzie próbował odgadnąć typu pola, sprawdzając zawartość. Wygląda to na nieco skomplikowane, ale możesz uciec przy użyciu bardzo małego podzbioru.

Mark Okup
źródło
2
+1 Pisanie do SYLK jest proste do zaimplementowania, zrobiłem to jako nowicjusz.
Matt H,
1
Nie wiedziałem o tym formacie. Wygląda na coś, czego mógłbym użyć. +1 za to!
Buggabill,
+1 Przejście z CSV na SYLK zajęło mi pięć minut. Mój format wyjściowy goto od teraz!
TheFish
@xamde, masz rację. To dziwne, że nigdy nie rozszerzyli formatu, aby go obsługiwać, jak to zrobili z RTF.
Mark Ransom
WTF, lub co ktoś by polecił, cytuję z Wikipedii: „Microsoft nie publikuje specyfikacji SYLK”.
sorin
14

Działa to w przypadku pakietu Microsoft Office 2010, Excel wersja 14

Błędnie odczytałem preferencję OP, aby „zrobić coś z samym plikiem”. Nadal zachowuję to dla tych, którzy chcą rozwiązania do bezpośredniego formatowania importu

  1. Otwórz pusty (nowy) plik (Plik -> Nowy ze skoroszytu)
  2. Otwórz Kreatora importu (Dane -> Z tekstu)
  3. Wybierz plik .csv i zaimportuj
  4. W oknie dialogowym wybierz „Rozdzielany” i kliknij Dalej.
  5. Wybierz separatory (odznacz wszystko oprócz „przecinka”), wybierz kwalifikatory tekstu (prawdopodobnie {Brak}), kliknij Dalej
  6. W polu Podgląd danych wybierz kolumnę, która ma być tekstem. Powinien się wyróżnić.
  7. W polu Format danych kolumny wybierz opcję „Tekst”.
  8. Kliknij zakończone.

źródło
wyjaśniono obrazami: support.insight.ly/hc/en-us/articles/…
Yo Ludke
2

Możesz po prostu sformatować swój zakres jako tekst.

Również tutaj jest fajny artykuł na temat formatów liczb i tego, jak je zaprogramować.

Ólafur Waage
źródło
Wpłynie to tylko na sposób wyświetlania wartości. Musisz przekonwertować go na tekst, za pomocą formuły lub podczas importu, jedną z wielu metod przedstawionych w tym wątku
leo
2

Właściwie odkryłem, że przynajmniej zaczynając od Office 2003, możesz zapisać arkusz kalkulacyjny Excela jako plik XML. W ten sposób mogę utworzyć plik XML, a po dwukrotnym kliknięciu zostanie on otwarty w programie Excel. Zapewnia ten sam poziom kontroli co SYLK, ale składnia XML jest bardziej intuicyjna.

Sergey Stadnik
źródło
2

Pomocne może być dodanie niełamującej przestrzeni w komórce. Na przykład: "firstvalue";"secondvalue";"005 ";"othervalue"

Zmusza program Excel do traktowania go jako tekstu, a spacja nie jest widoczna. W systemie Windows możesz dodać niezłamującą spację, przechylając alt + 0160. Więcej informacji można znaleźć tutaj: http://en.wikipedia.org/wiki/Non-breaking_space

Wypróbowano w programie Excel 2010. Mam nadzieję, że może to pomóc osobom, które nadal szukają całkiem odpowiedniego rozwiązania tego problemu.

Kloe2378231
źródło
2

Miałem ten problem podczas eksportowania danych CSV z kodu C # i rozwiązałem go, dodając początkowe dane zerowe znakiem tabulacji \ t, więc dane zostały zinterpretowane jako tekst, a nie numeryczne w programie Excel (ale w przeciwieństwie do poprzedzania innych znaków, nie nie widać).

Podobało mi się podejście = "001", ale nie pozwoliłoby to na ponowne zaimportowanie wyeksportowanych danych CSV do mojej aplikacji C # bez usuwania całego tego formatowania z importowanego pliku CSV (zamiast tego po prostu przycinam dane importu) .

Richard Pursehouse
źródło
1

Myślę, że kiedy importujesz plik, możesz wybrać typ kolumny. Ustaw jako tekst zamiast liczby. W tej chwili nie mam jednak przed sobą kopii do sprawdzenia.

Harley Holcombe
źródło
1

Załaduj csv do oleDB i wymuś wszystkie wywnioskowane typy danych na łańcuch

zadałem to samo pytanie, a następnie odpowiedziałem kodem.

w zasadzie po załadowaniu pliku csv sterownik oledb przyjmuje pewne założenia, możesz mu powiedzieć, jakie założenia przyjąć.

Mój kod wymusza jednak na wszystkich typach danych łańcuchowe ... bardzo łatwo jest zmienić schemat. do moich celów użyłem xslt, aby uzyskać ti tak, jak chciałem - ale analizuję wiele różnych plików.

John Nicholas
źródło
1

Wiem, że to stare pytanie, ale mam rozwiązanie, którego nie ma na liście.

Kiedy tworzysz csv, dodaj spację po przecinku, ale przed wartością, np , 005,.

To i tak zapobiegło automatycznemu formatowaniu daty w programie Excel 2007.

plntxt
źródło
2
Właśnie przetestowany, nie działa z programem Excel 2007 i kolumną liczbową. : - /
Norman H
1

Metoda Kreatora importu tekstu NIE działa, gdy importowany plik CSV ma podziały wierszy w komórce. Ta metoda obsługuje ten scenariusz (przynajmniej z danymi rozdzielanymi tabulatorami):

  1. Utwórz nowy plik Excel
  2. Ctrl + A, aby zaznaczyć wszystkie komórki
  3. W polu kombi Format liczb wybierz opcję Tekst
  4. Otwórz plik rozdzielany tabulatorami w edytorze tekstu
  5. Zaznacz wszystko, skopiuj i wklej do programu Excel
Ogórki konserwowe
źródło
1

Po prostu dodaj „przed numerem w dokumencie CSV.

MNassar
źródło
To nie zadziałało w programie Excel 2010 („staje się częścią zawartości komórki).
sancho.s ReinstateMonicaCellio
1

To doprowadzało mnie do szaleństwa przez cały dzień (ponieważ rzeczywiście nie możesz kontrolować typów kolumn programu Excel przed otwarciem pliku CSV) i to zadziałało dla mnie, używając VB.NET i Excel Interop:

        'Convert .csv file to .txt file.
        FileName = ConvertToText(FileName)

        Dim ColumnTypes(,) As Integer = New Integer(,) {{1, xlTextFormat}, _
                                                        {2, xlTextFormat}, _
                                                        {3, xlGeneralFormat}, _
                                                        {4, xlGeneralFormat}, _
                                                        {5, xlGeneralFormat}, _
                                                        {6, xlGeneralFormat}}

        'We are using OpenText() in order to specify the column types.
        mxlApp.Workbooks.OpenText(FileName, , , Excel.XlTextParsingType.xlDelimited, , , True, , True, , , , ColumnTypes)
        mxlWorkBook = mxlApp.ActiveWorkbook
        mxlWorkSheet = CType(mxlApp.ActiveSheet, Excel.Worksheet)


Private Function ConvertToText(ByVal FileName As String) As String
    'Convert the .csv file to a .txt file.
    'If the file is a text file, we can specify the column types.
    'Otherwise, the Codes are first converted to numbers, which loses trailing zeros.

    Try
        Dim MyReader As New StreamReader(FileName)
        Dim NewFileName As String = FileName.Replace(".CSV", ".TXT")
        Dim MyWriter As New StreamWriter(NewFileName, False)
        Dim strLine As String

        Do While Not MyReader.EndOfStream
            strLine = MyReader.ReadLine
            MyWriter.WriteLine(strLine)
        Loop

        MyReader.Close()
        MyReader.Dispose()
        MyWriter.Close()
        MyWriter.Dispose()

        Return NewFileName
    Catch ex As Exception
        MsgBox(ex.Message)
        Return ""
    End Try

End Function
Ellen
źródło
0

Podczas otwierania pliku CSV pojawia się kreator importu tekstu. Na ostatnim etapie kreatora powinieneś być w stanie zaimportować określoną kolumnę jako tekst, zachowując w ten sposób prefiks „00”. Następnie możesz sformatować komórkę w dowolny sposób.

Próbowałem z programem Excel 2007 i okazało się, że działa.

znak
źródło
1
W programie Excel 2003 nie pojawia się kreator.
Sergey Stadnik
0

Cóż, program Excel nigdy nie wyświetla kreatora plików CSV. Jeśli zmienisz nazwę na .txt, zobaczysz kreatora, gdy następnym razem wykonasz polecenie Plik> Otwórz w programie Excel.

Narayanan
źródło
0

Umieść pojedynczy cytat przed polem. Excel potraktuje go jako tekst, nawet jeśli wygląda jak liczba.

...,`005,...

EDYCJA: to źle. Sztuczka z apostrofem działa tylko podczas wprowadzania danych bezpośrednio do programu Excel. Kiedy używasz go w pliku CSV, apostrof pojawia się w polu, którego nie chcesz.

http://support.microsoft.com/kb/214233

JW.
źródło
4
To jest coś, czego ludzie prawdopodobnie spróbują. Świadomość, że to nie zadziała, jest przydatna i oszczędza czas.
AndyM