Artikel
Mengapa Excel merosakkan fail CSV anda
ID pesakit yang bermula dengan tiga sifar. Gen bernama SEPT2. Nombor akaun enam belas digit. Buka mana-mana daripada ini dalam hamparan sebagai fail CSV biasa dan pengimport Excel bukan sahaja memaparkannya, ia menulis semulanya: sifar hilang, nama gen menjadi tarikh, dan nombor akaun kehilangan beberapa digit terakhirnya. Tiada satu pun ini benar-benar pepijat, ia adalah apa yang berlaku apabila peneka nombor-dan-tarikh serba guna bertembung dengan teks yang hanya kelihatan seperti nombor atau tarikh. Inilah apa yang sebenarnya berlaku kepada fail CSV sebaik sahaja Excel membukanya, dan cara menghentikannya sebelum ia berlaku.
Sifar mendahului hilang
Taip 02134 ke dalam sel dan jenis lajur lalai Excel, General, membacanya sebagai nombor dan menggugurkan sifar mendahului: 2134. Ini menjejaskan mana-mana kod yang disimpan sebagai digit tetapi bukan benar-benar kuantiti, kod ZIP AS, kod pos Perancis, nombor pekerja atau invois, nombor telefon. Tiada apa-apa hilang secara teknikal daripada fail CSV asas, teks di sebelah sel itu kekal tidak berubah, sehingga anda menyimpan buku kerja, pada titik itu Excel menulis semula apa jua yang dipaparkannya, dan sifar itu hilang untuk selama-lamanya. Pembetulannya ialah memberitahu Excel bahawa lajur itu teks sebelum ia sempat meneka: melalui Data > Daripada Teks/CSV (atau Dapatkan Data > Daripada Fail) anda boleh menetapkan jenis data setiap lajur secara jelas, atau tambah tanda petik sebelum nilai dalam satu sel untuk memaksa teks.

Teks bertukar menjadi tarikh tanpa bertanya
Peneka yang sama juga mencari teks berbentuk tarikh. Sel yang mengandungi MAR1 atau SEPT2, dibaca sebagai 1 Mac atau 2 September, ditukar secara senyap kepada nilai tarikh dan diformat semula, tanpa amaran ditunjukkan. Ini bukan hipotesis: pada 2020 Jawatankuasa Nomenklatur Gen HUGO menamakan semula sekitar 27 simbol gen manusia, termasuk SEPT2 dan MARCH1, khusus kerana perisian hamparan sentiasa menukarnya menjadi tarikh setiap kali set data dibuka, masalah yang cukup serius sehingga tinjauan kertas genomik pada 2016 menemui ralat pembetulan automatik seperti ini dalam kira-kira satu daripada lima penerbitan yang menyertakan fail Excel tambahan. Pengajaran itu berlaku secara umum melangkaui nama gen: mana-mana kod alfanumerik pendek yang kebetulan kelihatan seperti hari dan bulan berisiko sebaik sahaja seseorang membuka CSV anda dalam hamparan, bukan sahaja milik anda.
Nombor yang sangat panjang kehilangan digit terakhirnya
Excel menyimpan setiap nombor sebagai nilai titik terapung dengan ketepatan 15 digit bererti, had yang didokumenkan terus oleh Microsoft. Nombor kad atau akaun enam belas digit seperti 4111111111111111 dibundarkan supaya muat, jadi satu atau dua digit terakhir secara senyap bertukar kepada sifar dan nilai itu tidak lagi sama seperti yang anda taip. Memformat sel selepas itu tidak akan mengembalikan digit yang hilang, kerana nombor yang disimpan asasnya sudah dibundarkan; satu-satunya pembetulan ialah mengimport lajur itu sebagai teks, atau memberi awalan nilai itu dengan tanda petik, sebelum Excel sempat menganggapnya sebagai nombor.

Teks bertanda aksen bertukar menjadi kucar-kacir
Pengekodan ialah mod kegagalan berasingan daripada pembetulan automatik. Fail CSV tanpa tanda susunan bait ialah bait biasa; jika ia disimpan sebagai UTF-8, Excel pada Windows biasanya akan membukanya dengan mengandaikan halaman kod sistemnya sendiri sebaliknya, jadi huruf bertanda aksen, simbol mata wang dan emoji keluar sebagai mojibake, rentetan seperti café muncul sebagai sesuatu yang lebih menyerupai café. Laluan selamat apabila menghasilkan CSV untuk Excel ialah menyimpannya sebagai CSV UTF-8 atau menambah tanda susunan bait UTF-8; laluan selamat apabila menggunakan satu ialah mengimport melalui Data > Daripada Teks/CSV, yang membenarkan anda memilih pengekodan sumber secara jelas berbanding mempercayai klik dua kali untuk meneka dengan betul.
Memindahkan data antara format tanpa membukanya dalam Excel
Tiada satu pun ini sebenarnya pepijat Excel, ia adalah apa yang direka untuk dilakukan oleh peneka nombor-dan-tarikh hamparan, dan ia terpakai tidak kira bagaimana fail itu dibuka, bukan hanya dalam Excel. Cara paling selamat untuk membentuk semula fail CSV atau menyemak bahawa lajur benar-benar kekal teks sebelum ia sampai ke mana-mana hamparan ialah bekerja terus dengannya: penukar data kami menghurai CSV dengan penghurai sedar-petikan piawai dan tidak pernah mentafsir semula jenis sesuatu nilai, jadi kod ZIP atau nama gen kekal tepat seperti teks yang anda berikan. Ia berjalan sepenuhnya dalam pelayar anda, tiada apa yang anda tampal dimuat naik ke mana-mana. Itu hanya melindungi langkah penukaran, walaupun: jika keluarannya masih akan dibuka dalam hamparan selepas itu, tandakan lajur sensitif itu sebagai teks di situ juga.
Alat dalam artikel ini
Soalan lazim
Bagaimana saya menghentikan Excel daripada membuang sifar mendahului daripada CSV?
Jangan buka fail itu dengan klik dua kali. Import sebaliknya melalui Data > Daripada Teks/CSV (atau Dapatkan Data), yang menunjukkan pemilih jenis data lajur demi lajur; tetapkan lajur kod ZIP, ID atau nombor telefon kepada Teks sebelum menyelesaikan import. Pembetulan sel demi sel yang pantas ialah menaip tanda petik sebelum nilai itu, seperti '02134, yang memaksa teks tanpa mengubah apa yang dipaparkan.
Mengapa Excel menukar ID atau kod saya menjadi tarikh?
Jenis lajur General Excel secara aktif mencari teks berbentuk tarikh, corak seperti perkataan pendek ditambah nombor, atau dua nombor dipisahkan sengkang atau garis serong, dan menukar apa jua yang sepadan, tanpa pengesahan diminta. Ini tepat apa yang memaksa penamaan semula simbol gen seperti SEPT2 dan MARCH1 pada 2020. Import lajur itu sebagai Teks, sama seperti bagi sifar mendahului, untuk menghentikan tekaan itu sebelum ia berlaku.
Adakah menukar CSV saya dengan cara lain mengelakkan masalah ini sepenuhnya?
Ia mengelakkannya untuk langkah penukaran itu, bukan selama-lamanya. Penghurai yang melayan setiap medan sebagai teks biasa, seperti penukar data kami, tidak akan menulis semula kod ZIP atau nama gen semasa menukar CSV kepada JSON. Tetapi jika keluarannya masih berakhir dibuka dalam hamparan kemudian, oleh anda atau oleh sesiapa yang menerimanya, pengimport program itu sendiri mendapat peluang lain untuk mentafsir semula nilai itu, jadi lajur sensitif perlu ditandakan sebagai teks di situ juga.