Impor Excel CSV memperlakukan string angka yang dikutip sebagai nilai numerik, bukan string

13

Saya punya aplikasi web yang mengekspor datanya ke file CSV. Inilah satu contoh deretan file CSV yang dimaksud:

28,"65154",02/21/2013 00:00,"false","0316295","8316012,8315844","MALE"

Karena saya tidak dapat memposting gambar, saya harus menjelaskan hasilnya di Excel. Kolom "0316295" diubah menjadi angka dan 0 di depannya menghilang. "8316012,8315844" ditafsirkan sebagai satu nomor tunggal: 83.160.128.315.844. Jelas, itu bukan hasil yang dimaksudkan.

Saya telah melihat orang merekomendasikan kutipan tunggal terkemuka untuk kasus-kasus seperti itu, tetapi itu tidak benar-benar berhasil.

28,"65154",02/21/2013 00:00,"false","'0316295","'8316012,8315844","MALE"

Kutipan tunggal terlihat setiap saat di dalam sel di Excel, meskipun jika saya memasukkan nomor sendiri dengan kutipan tunggal, itu hanya menunjukkan string yang dimaksud dan bukan kutipan tunggal dengan string.

Mengimpor tidak sama dengan mengetik, tampaknya.

Adakah yang punya solusi di sini?

Michael Oryl
sumber
Apakah Anda dapat mengimpornya menggunakan LibreOffice atau sejenisnya? Saya baru saja mengimpor dan mendapatkan: 28 65154 02/21/2013 00:00 false 0316295 8316012,8315844 MALE (jika Anda dapat membaca itu ...?)
FreudianSlip
Pertanyaan ini serupa dan menawarkan beberapa solusi bagus: superuser.com/questions/234997/…
Brad Patton
@FreudianSlip Tidak, kami tidak dapat menggunakan beberapa solusi pihak ke-3. Pengguna mengklik tombol "unduh CSV" dan file terbuka di Excel. Itulah lingkungan yang kita hadapi. Tidak bisa benar-benar menyulitkannya.
Michael Oryl
@ Rad saya membaca posting itu sebelumnya mencari solusi. Di situlah saya mendapatkan opsi kutipan tunggal, yang saya benar-benar tidak suka karena Excel menunjukkan kutipan di sel itu sendiri ketika diimpor dari CSV (bahkan jika itu tidak menunjukkannya jika Anda mengetikkan hal yang sama pada diri Anda sendiri).
Michael Oryl
jadi apakah Anda mengendalikan aplikasi web setidaknya? bagaimana Anda akan mengimplementasikan solusi secara transparan dari pengguna? Saya telah memperbarui jawaban saya sehingga benar-benar menangani nilai dengan koma
Alex P.

Jawaban:

10

Ini seharusnya bekerja

28,"65154",02/21/2013 00:00,"false",="0316295","=""8316012,8315844""","MALE"
Alex P.
sumber
Tidak, itu merusak nilai dengan dua angka di dalamnya. Kami mendapatkan = "1234567 tanpa kutipan penutup. Namun bekerja untuk angka yang lebih sederhana.
Michael Oryl
1
jika Anda mengontrol aplikasi web, Anda dapat menerapkan ekspor ke dalam format SYLK en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK) . ia memiliki kontrol representasi data yang jauh lebih baik. jika tidak - Anda dapat dengan mudah membuat skrip konverter
Alex P.
2
memperbarui jawabannya sehingga dapat menangani nilai dengan benar dengan koma
Alex P.
Itu menangani nilai yang dipisahkan koma dengan benar. Terima kasih.
Michael Oryl
Terima kasih. Solusi ini memecahkan masalah dengan mengimpor angka heksadesimal juga. Excel mengganti 00E3dengan 0 (0 * 10 ^ 3) dan menampilkannya sebagai sci notation (0,00E + 00). Sebenarnya melakukan hal yang sama untuk "00e3"tanpa =. Tetapi ="00e3"bekerja dengan sempurna. (membuka CSV dengan Excel 2010)
mpag
12

Untuk menjaga angka nol di depannya, Anda bisa mengatur format kolom spesifik itu menjadi Teks di Panduan Impor Teks.

  1. Mulai Wisaya Impor Teks dengan masuk ke tab Data & mengklik Dari Teks .
  2. Pilih file CSV yang ingin Anda impor.
  3. Pilih Dibatasi & tekan Selanjutnya .
  4. Hapus centang Tab (default). Pilih Koma . Pastikan Kualifikasi Teks diatur ke ". Hit Selanjutnya .
  5. Di sinilah Anda dapat menentukan format . Klik tajuk kolom yang nol depannya ingin Anda pertahankan. Pilih Teks . (Lihat gambar di bawah)

    masukkan deskripsi gambar di sini

  6. Tekan Selesai & lalu pilih lokasi yang cocok untuk data Anda. Hasil sampel:

    masukkan deskripsi gambar di sini

Sunting : Ada cara lain ; mintalah aplikasi web mengekspor ke file .TXT yang dibatasi koma alih-alih .CSV (atau hanya mengubah ekstensi file dari file yang diekspor setelah menyimpannya). Ini memaksa Excel untuk pergi melalui panduan impor ketika mereka membuka file. Sebagai keuntungan tambahan, ini mengurangi kemungkinan pengguna memodifikasi atau merusak data mentah asli Anda.

Ellesa
sumber
1
Ya itu tentu benar. Hanya saja tidak terlalu nyaman bagi pengguna akhir ketika, sebagai perbandingan, yang harus mereka lakukan adalah mengklik tautan generator CSV di aplikasi web kami dan Excel memuatnya secara otomatis - walaupun dengan masalah yang disebutkan di atas. File CSV diatur untuk dibuka di Excel, dan Excel tidak menawarkan opsi apa pun pada saat itu. Itu hanya memuat mereka. Saya menghargai Anda menunjukkan hal itu.
Michael Oryl
1
Ada cara lain, tetapi saya tidak tahu apakah itu mungkin dalam kasus Anda: minta ekspor aplikasi web ke koma-delimited .TXTbukan .CSV(atau hanya mengubah ekstensi file dari file yang diekspor). Ini semacam "memaksa" pengguna untuk pergi melalui panduan impor ketika mereka membuka file.
Ellesa
Itu poin yang sangat bagus. Terima kasih telah menunjukkannya. Mungkin bermanfaat di masa depan.
Michael Oryl
4

Excel memperlakukan nilai numerik yang dimulai dengan karakter tab sebagai teks.

<tabchar>000000100000200000,ABC,DEF

Akan muncul sebagai:

000000100000200000|ABC|DEF

| adalah batas sel (untuk tujuan ilustrasi). Jadi, misalnya, jika sistem Anda menghasilkan file CSV menggunakan charset utf-8, Anda dapat menambahkan &#x0009;(Tab Char in Hex) sebelum nilai numerik Anda untuk memaksa excel untuk menafsirkannya sebagai teks.

Madeyedexter
sumber
Hapus ruang sebelum titik koma di representasi Hex. Saya tidak tahu bagaimana cara keluar dari karakter Hex Tab dalam jawaban, jadi saya sengaja salah mengetik.
Madeyedexter
1
Saya yang melarikan diri. Dan saya belajar sesuatu yang baru, terima kasih. Saya harus menambahkan ini ke topik favorit saya untuk bekerja :)
nixda
3

Excel akan secara otomatis mendeteksi format bidang CSV kecuali kolom CSV dalam format ini:

"=""Data Here"""

Ini juga berfungsi untuk lembar Google

Chris Halcrow
sumber
0

Anda harus menggunakan fungsionalitas "Data -> Dapatkan Data Eksternal -> Impor Teks dari file" di Excel untuk membuatnya ditampilkan sebagai teks. Ini adalah panduan impor teks @Kaze yang disebutkan.

Satu-satunya cara untuk memaksa excel untuk menampilkan angka sebagai teks dari input, tanpa pengguna harus melakukan apa pun, adalah dengan mengeluarkan file excel dan menentukan "format nomor kustom" di dalamnya. Saya sarankan menggunakan perpustakaan ekspor XLS untuk ini, karena sepertinya tidak sesederhana menambahkan baris teks konfigurasi ke file CSV.

Magne
sumber
0

coba fungsi bersih untuk nilai-nilai yang kacau. Misalnya = bersih ("12345678901234567890"). Ini berfungsi untuk saya untuk angka, tanggal, waktu, dll. Saya akan mengingatkan bahwa karena ini sama sekali bukan tujuan fungsi ini maka ini bisa berhenti bekerja dengan versi baru, dll.

Mark Prather
sumber