Tanpa unggah, 100% lokal, tanpa akun

Artikel

Mengapa Excel merusak file CSV Anda

ID pasien yang dimulai dengan tiga angka nol. Gen bernama SEPT2. Nomor rekening enam belas digit. Buka salah satu dari ini di spreadsheet sebagai file CSV polos dan pengimpor Excel tidak sekadar menampilkannya, ia menulis ulang: angka nolnya hilang, nama gen berubah jadi tanggal, dan nomor rekening kehilangan beberapa digit terakhirnya. Ini bukan benar-benar bug, ini adalah yang terjadi saat penebak angka-dan-tanggal serbaguna bertemu teks yang hanya terlihat seperti angka atau tanggal. Berikut apa yang sebenarnya terjadi pada file CSV begitu Excel membukanya, dan cara menghentikannya sebelum itu terjadi.

Angka nol di depan menghilang

Ketik 02134 ke sebuah sel dan tipe kolom default Excel, General, membacanya sebagai angka dan membuang angka nol di depan: 2134. Ini memengaruhi kode apa pun yang disimpan sebagai digit tetapi sebenarnya bukan kuantitas, kode pos AS, kode pos Prancis, nomor pegawai atau faktur, nomor telepon. Secara teknis tidak ada yang hilang dari file CSV yang mendasarinya, teks di samping sel tetap tidak berubah, hingga Anda menyimpan workbook-nya, pada titik itu Excel menulis kembali apa pun yang ditampilkannya, dan angka nolnya hilang untuk selamanya. Perbaikannya adalah memberi tahu Excel bahwa kolom itu teks sebelum ia sempat menebak: melalui Data > From Text/CSV (atau Get Data > From File) Anda dapat mengatur tipe data setiap kolom secara eksplisit, atau menambahkan tanda petik satu sebelum nilai di satu sel untuk memaksa teks.

Tipe kolom General milik Excel membaca teks 02134 sebagai angka dan membuang angka nol di depan sehingga menampilkan 2134

Teks berubah jadi tanggal tanpa pemberitahuan

Penebak yang sama juga mencari teks berbentuk tanggal. Sel yang berisi MAR1 atau SEPT2, dibaca sebagai 1 Maret atau 2 September, diam-diam dikonversi menjadi nilai tanggal dan diformat ulang, tanpa peringatan yang ditampilkan. Ini bukan hipotesis: pada tahun 2020 HUGO Gene Nomenclature Committee mengganti nama sekitar 27 simbol gen manusia, termasuk SEPT2 dan MARCH1, secara khusus karena perangkat lunak spreadsheet terus mengubahnya menjadi tanggal setiap kali sebuah dataset dibuka, masalah yang cukup serius sehingga survei tahun 2016 terhadap makalah genomika menemukan kesalahan autocorrect seperti ini pada kira-kira satu dari lima publikasi yang menyertakan file Excel tambahan. Pelajarannya berlaku lebih luas daripada sekadar nama gen: kode alfanumerik pendek apa pun yang kebetulan terlihat seperti hari dan bulan berisiko begitu seseorang membuka CSV Anda di spreadsheet, bukan hanya CSV milik Anda.

Angka yang sangat panjang kehilangan digit terakhirnya

Excel menyimpan setiap angka sebagai nilai floating-point dengan presisi 15 digit signifikan, batas yang didokumentasikan langsung oleh Microsoft. Nomor kartu atau rekening enam belas digit seperti 4111111111111111 dibulatkan agar pas, sehingga satu atau dua digit terakhirnya diam-diam berubah menjadi nol dan nilainya bukan lagi yang Anda ketik. Memformat sel setelahnya tidak akan mengembalikan digit yang hilang, karena angka yang tersimpan di baliknya sudah dibulatkan; satu-satunya perbaikan adalah mengimpor kolom sebagai teks, atau memberi awalan tanda petik satu pada nilainya, sebelum Excel sempat memperlakukannya sebagai angka.

Excel hanya menyimpan 15 digit signifikan dari sebuah angka: nilai 16 digit 4111111111111111 dibulatkan dan digit terakhirnya berubah menjadi nol

Teks beraksen berubah jadi kacau

Encoding adalah jenis kegagalan yang terpisah dari autokoreksi. File CSV tanpa byte-order mark adalah byte polos; jika disimpan sebagai UTF-8, Excel di Windows biasanya akan membukanya dengan asumsi codepage sistemnya sendiri, sehingga huruf beraksen, simbol mata uang, dan emoji keluar sebagai mojibake, string seperti café muncul menjadi sesuatu yang lebih mirip café. Cara aman saat membuat CSV untuk Excel adalah menyimpannya sebagai CSV UTF-8 atau menambahkan byte-order mark UTF-8; cara aman saat mengonsumsinya adalah mengimpor melalui Data > From Text/CSV, yang memungkinkan Anda memilih encoding sumber secara eksplisit alih-alih mempercayai klik ganda untuk menebak dengan benar.

Memindahkan data antar format tanpa membukanya di Excel

Semua ini sebenarnya bukan bug Excel, ini adalah yang memang dirancang untuk dilakukan penebak angka-dan-tanggal sebuah spreadsheet, dan berlaku bagaimanapun file itu dibuka, bukan hanya di Excel. Cara paling aman untuk membentuk ulang file CSV atau memeriksa bahwa sebuah kolom benar-benar tetap teks sebelum mencapai spreadsheet mana pun adalah mengerjakannya langsung: Konverter Data kami mem-parsing CSV dengan parser standar yang sadar tanda kutip dan tidak pernah menafsirkan ulang tipe sebuah nilai, sehingga kode pos atau nama gen tetap persis teks yang Anda berikan. Alat ini berjalan sepenuhnya di browser Anda, tidak ada yang Anda tempel yang diunggah ke mana pun. Namun itu hanya melindungi tahap konversi: jika hasilnya masih akan dibuka di spreadsheet setelahnya, tandai juga kolom sensitif itu sebagai teks di sana.

Alat dalam artikel ini

Pertanyaan yang sering diajukan

Bagaimana cara menghentikan Excel menghapus angka nol di depan dari CSV?

Jangan membuka file dengan mengklik ganda. Impor sebagai gantinya melalui Data > From Text/CSV (atau Get Data), yang menampilkan pemilih tipe data per kolom; atur kolom kode pos, ID, atau nomor telepon ke Text sebelum menyelesaikan impor. Perbaikan cepat per sel adalah mengetik tanda petik satu sebelum nilainya, seperti '02134, yang memaksa teks tanpa mengubah apa yang ditampilkan.

Mengapa Excel mengubah ID atau kode saya menjadi tanggal?

Tipe kolom General milik Excel secara aktif mencari teks berbentuk tanggal, pola seperti kata pendek plus angka, atau dua angka yang dipisahkan tanda hubung atau garis miring, dan mengonversi apa pun yang cocok, tanpa konfirmasi yang diminta. Ini persis yang memaksa penggantian nama simbol gen seperti SEPT2 dan MARCH1 pada tahun 2020. Impor kolom sebagai Text, sama seperti untuk angka nol di depan, untuk menghentikan tebakan itu sebelum terjadi.

Apakah mengonversi CSV saya dengan cara lain menghindari masalah ini sepenuhnya?

Itu menghindarinya untuk tahap konversi tersebut, bukan selamanya. Parser yang memperlakukan setiap kolom sebagai teks polos, seperti Konverter Data kami, tidak akan menulis ulang kode pos atau nama gen saat mengubah CSV menjadi JSON. Tetapi jika hasilnya tetap berakhir dibuka di spreadsheet nanti, oleh Anda atau oleh siapa pun yang menerimanya, pengimpor program itu sendiri mendapat kesempatan lain untuk menafsirkan ulang nilainya, sehingga kolom sensitif itu perlu ditandai sebagai teks di sana juga.

Sumber