2008-11-21 8 views
23

Chcę wygenerować plik CSV, aby użytkownik mógł użyć programu Excel do jego otwarcia.Plik CSV dla programu Excel, w tym zarówno wiodące wartości zer, jak i przecinki

Jeśli chcę uciec od przecinka w wartościach, mogę zapisać go jako "640,480".

Jeśli chcę zachować wiodące zera, mogę użyć = "0".

Ale jeśli chcę zachować w wartościach zarówno zera przecinające, jak i wiodące, zapis jako = "001,002" zostanie podzielony na dwie kolumny. Wydaje się, że nie ma sposobu na wyrażenie poprawnych danych.

Czy jest jakiś sposób wyrażenia w CSV dla programu Excel 001, 002?

Odpowiedz

4

Czy

"""001,002""" 

Znalazłem to przez wpisanie "001,002", a następnie robi save-as CSV w programie Excel. Jeśli nie jest to dokładnie to, czego chcesz (nie chcesz cytatów), może to być dobry sposób na znalezienie tego, czego szukasz.

Inną opcją może być użycie tekstu rozdzielanego tabulatorami, jeśli jest to opcja dla ciebie.

5

wpisz ciąg prefiksu na danych:

"N001,002","N002,003" 

(Dopóki że prefiks nie jest E)

To zapis (w OpenOffice przynajmniej) powyżej analizuje w sumie 2 kolumnach przy poprawnie zapisanych bajtach N001,002.

Specyfikacja CSV mówi, że jest dozwolona w cudzysłowach.

Ponadto, Ostrzeżenie z doświadczenia: upewnij się, że robisz to również z numerami telefonów. W innym przypadku Excel interpretuje numery telefonów jako liczby zmiennoprzecinkowe i zapisuje je w notacji naukowej: /, a 1.800E10 nie jest naprawdę dobrym numerem telefonu.

W OpenOffice, to RawCSV kawałek dekoduje również zgodnie z oczekiwaniami:

"=""001,002""","=""002,004""" 

tj:

$rawdata = '001,002'; 
    $equation = "=\"$rawdata\""; 
    $escaped = str_replace('"','""',$equation); 
    $csv_chunk = "\"$escaped\"" ; 
0

Przyglądając się w arkuszu kalkulacyjnym Excel wygląda na to, co chcesz, nie można zrobić za pomocą pliku CSV.

Ta strona http://office.microsoft.com/en-us/excel/HP052002731033.aspx mówi: "Jeśli komórki wyświetlają formuły zamiast wartości formuł, formuły są konwertowane jako tekst Wszystkie symbole, grafika, obiekty i inne treści arkusza roboczego są tracone Symbol euro zostanie przekonwertowany na znak zapytania. "

Można jednak zmienić sposób ładowania, aby uzyskać pożądany wynik. Zobacz tę stronę: Microsoft import a text file.

Kluczową sprawą jest wybranie opcji Importuj dane importu danych zewnętrznych - pliki tekstowe, przejdź do następnego, następnego, a następnie zaznacz "Tekst" w formacie danych kolumny. Zapobiegnie to zinterpretowaniu jej jako liczby i utracie formatowania.

1

Czytelnik mojego bloga znalazł rozwiązanie, = "001" & CHAR (44) & "002", wydaje się, że działa na moim komputerze! Odpowiedź

31

Kent Fredric zawiera rozwiązanie: (. Ja troszcząc się pisać to jako odrębnej odpowiedzi, ponieważ nie wynika z odpowiedzi Kenta, że ​​jest to ważne rozwiązanie Excel)

 "=""001,002"""

+0

Brilliant. Pracowałem dokładnie tak, jak tego potrzebowałem. – Sasha

+1

Jedna uwaga-strona: to wydaje się działać dla czegokolwiek Poza wartościami, które mają ponad 253 znaki długości (po 255 znakach, program Excel przestaje szukać końcowych cytatów i staje się zdezorientowany ...?) – Tao

+0

ciekawie, podczas gdy to działa: 000 "=" "001,002" "" to nie oznacza: 000, "=" "001,002" "" – eyaler

0

Byłem błądzący przy CSV do Excela (używam PHP do tworzenia CSV, ale myślę, że to rozwiązanie działa dla dowolnego języka.) Gdy zauważysz, że wiodące znaki (takie jak +, - lub 0 znikają, utwórz CSV z chr(13) jako przedrostek, to jest niedrukowalna postać i działa cuda dla mojej wersji Excel Office 2010. Próbowałem innych niż printab le znaków, ale bez powodzenia.

więc używam cip rozwiązania internetowego, ale manipulowane z moim prefix:

if (preg_match("/^0/", $str) || preg_match("/^\+?\d{8,}$/", $str) || preg_match("/^\d{4}.\d{1,2}.\d{1,2}/", $str)) { 
    $str = chr(13)."$str"; 
} 
0

Jeśli używasz „Content-Disposition” i eksportu z ASP do programu Excel przy użyciu znaczników HTML, a następnie trzeba dodać „style = "mso-number-format: \ @;" "do tego znacznika i sprawiając, że akceptuje tylko wartości tekstowe, dzięki czemu uniknie się pomijania zer, jeśli zostanie zaakceptowany ukośnik" \ ", użyj podwójnego ukośnika" \ "

0

Wszystkie sugerowane odpowiedzi nie wydają się teraz działać dla mnie ("=" "blahblah" "" i inne) we wszystkich obecnych wersjach programu Excel lub aplikacji Numbers na OS X.

Jedynym rozwiązaniem, które znalazłem działając przez błądzenie jest dodanie znaku z zerem na początku napisu (który jest \ 0 w językach opartych na PHP lub C). Wszystko kończy się traktowane tak jak nie jest obliczane lub przetwarzane przez oprogramowanie podczas otwierania arkusza kalkulacyjnego.

echo "\0" . $data; 
1

Dość stara nitka, ale dlaczego po prostu nie dodasz spacji po swojej wartości. Będzie traktowany jako ciąg, a zer wiodących nie będzie rozebrany.

"001002".”"

+0

Tak, tak - zmieniono moje zapytanie sql na: s.TextColumnThatLooksLikeANumber + '' – skrile

0

Excel używa domyślne formatowanie kolumn CSV w zależności od zawartości. Więc jeśli masz 001 w pliku CSV, program Excel automatycznie zmieni go na 1.

Jedynym sposobem na utrzymanie wiodących zer w Excelu z pliku csv jest zmiana rozszerzenia pliku csv na .txt, a następnie tylko otwórz program Excel, kliknij przycisk Otwórz, wybierz plik tekstowy, a zobaczysz Kreatora importu tekstu. Wybierz format csv (oddzielony przecinkami), a następnie upewnij się, że jako format wybrano "Tekst".

I to wszystko, teraz możesz eksportować poprzednie dane CSV do innych, zachowując początkowe zera.

1

Ponieważ nikt już o tym nie wspomniał, pomyślałem, że warto wspomnieć o tym w tym starym poście.

Jeśli przed numerem zostanie dodany poziomy znak tabulacji \t, program MS Excel wyświetli także początkowe wartości zerowe. A znak tabulacji nie pojawia się w arkuszu Excel. Nawet jeśli jest otoczony podwójnymi cudzysłowami. (F.e. \"\t001,002\")

Wygląda również ładniej w Notepad ++, w porównaniu do umieszczenia \0 aka NULL przed takim numerem.

Powiązane problemy