Mengapa Excel merusak CSV Anda
Kode pos kehilangan angka nol di depannya, kode produk berubah menjadi tanggal, dan ID panjang diam-diam dibulatkan. Semua itu terjadi saat file dibuka, bukan saat disimpan — karena itulah banyak orang tidak pernah tahu apa yang salah.
Terakhir ditinjau
Kerusakan terjadi saat file dibuka
Bagian inilah yang membuat masalahnya sangat sulit dilacak. CSV adalah file teks: setiap nilai di dalamnya hanyalah karakter, dan tidak ada apa pun di file itu yang menyatakan artinya. Saat Excel membukanya, Excel menebak tipe setiap kolom, mengubah nilainya agar sesuai, dan sejak saat itu menyimpan versi yang sudah diubah. Simpan filenya, dan hasil konversi itu ditulis kembali.
Jadi file aslinya baik-baik saja, file yang Anda simpan tidak, dan tidak ada peringatan apa pun. Orang menyimpulkan bahwa ekspornya rusak, mengekspor ulang, lalu mendapat hasil yang sama — karena kerusakannya terjadi di komputer mereka sendiri, setelah file diunduh.
Empat konversi penyebab kerusakan
Angka nol di depan dibuang. Kode pos 01234, kode departemen di Prancis, nomor rekening, nomor telepon yang diawali nol — semuanya tampak seperti angka, jadi nolnya dibuang karena dianggap tidak bermakna. Padahal nol itu bermakna; ia bagian dari identitas data tersebut.
Angka panjang dibulatkan. Spreadsheet menyimpan angka sebagai floating point dengan sekitar lima belas digit signifikan, sehingga nomor pesanan, nomor kartu kredit, IMEI, atau ID 64-bit diam-diam dibulatkan — digit terakhirnya menjadi nol. Selnya tampak seperti angka, tetapi angkanya salah.
Apa pun yang mirip tanggal diubah formatnya, mengikuti konvensi lokal. 03/05 berarti Maret di satu negara dan Mei di negara lain, sehingga file yang sama yang dibuka di dua kantor menghasilkan dua dataset yang berbeda. Lebih parah lagi, nilai yang sama sekali bukan tanggal ikut diubah: nama gen seperti SEPT1 berubah menjadi tanggal — masalah yang begitu membandel sehingga para ahli genetika akhirnya mengganti nama gennya daripada terus melawannya.
Huruf beraksen berubah menjadi mojibake. CSV tidak menyimpan catatan tentang encoding karakternya, sehingga file yang disimpan sebagai UTF-8 lalu dibaca sebagai code page lama — atau sebaliknya — merusak tepat pada baris-baris yang berisi nama dengan aksen.
Solusinya: impor, jangan buka
Jangan pernah mengklik dua kali CSV yang penting bagi Anda. Klik dua kali memberi Excel izin untuk menebak, dan Excel menebak dengan sangat yakin.
Sebagai gantinya, pakai Data → From Text/CSV (di Excel berbahasa Indonesia: Data → Dari Teks/CSV). Dialog impornya memungkinkan Anda menetapkan tipe setiap kolom sebelum apa pun diurai — tandai kolom kode pos dan kolom ID sebagai Text (Teks), dan nilainya masuk persis seperti di file. Dialog ini juga memungkinkan Anda menentukan encoding dan pemisah, alih-alih membiarkannya ditebak. Hanya butuh dua puluh detik, dan itulah seluruh solusinya.
Hal yang sama berlaku di Google Sheets: File → Import, lalu matikan “Convert text to numbers, dates and formulas”. LibreOffice Calc menampilkan dialog tipe kolom secara default — salah satu dari sedikit hal yang memang ditanganinya dengan lebih baik.
Periksa sebelum mengimpor
Jika sesuatu sudah telanjur salah, langkah pertama yang berguna adalah melihat file tanpa disentuh spreadsheet. Melihat CSV menampilkan nilainya persis seperti yang tertulis di byte-nya — angka nol di depan masih ada, angka panjang utuh, tanggal masih berupa teks seperti saat ditulis. Dari situ Anda langsung tahu apakah yang salah ekspornya atau impornya.
Anda juga bisa melihat dua hal yang tidak pernah dinyatakan oleh CSV tentang dirinya sendiri: pemisahnya — koma, titik koma, atau tab; lokal Eropa mengekspor titik koma karena koma adalah pemisah desimal mereka — dan encoding-nya. Mengetahui keduanya sebelum mengimpor menghilangkan sebagian besar tebak-tebakan yang tersisa.
Jika Anda yang membuat CSV-nya
Beberapa keputusan di sisi ekspor bisa mencegah semua masalah ini di sisi penerima.
Tulis UTF-8 dengan byte order mark jika file ditujukan untuk Excel di Windows. Excel memakai tanda itu untuk mendeteksi UTF-8 dan merusak huruf beraksen tanpanya — salah satu dari sedikit kasus ketika menambahkan BOM adalah keputusan yang tepat, bukan gangguan.
Beri tanda kutip pada setiap kolom yang bisa salah dibaca, dan selalu beri tanda kutip pada kolom ID. Tanda kutip tidak mencegah Excel mengubah nilai saat dibuka, tetapi membuat maksudnya jelas bagi setiap program lain yang membacanya.
Pertimbangkan untuk tidak memakai CSV sama sekali. Jika penerima bisa menerima JSON atau spreadsheet sungguhan, keduanya membawa tipe data secara eksplisit dan tidak punya satu pun masalah di atas. Kelebihan CSV adalah semua program bisa membacanya; kelemahannya, tidak ada yang sepakat tentang artinya.
Pertanyaan yang sering diajukan
Bisakah kerusakan dibatalkan setelah disimpan?
Tidak bisa diandalkan. Angka nol di depan yang dibuang dan digit yang dibulatkan sudah hilang — tidak ada apa pun di file untuk memulihkannya. Ekspor ulang dari sumber aslinya; karena itulah menyimpan hasil ekspor asli tanpa diubah sepadan dengan ruang disknya.
Mengapa CSV saya terbuka sebagai satu kolom panjang?
Pemisahnya tidak sesuai dengan yang diharapkan spreadsheet — biasanya file dengan titik koma dibuka di lokal yang memakai koma, atau sebaliknya. Dialog impor memungkinkan Anda menentukannya, dan itu lebih cepat daripada mengubah pengaturan regional sistem Anda.
Karakter aneh apa di awal nama kolom pertama saya?
Itu byte order mark, yang dibaca sebagai teks alih-alih sebagai petunjuk encoding. Tanda yang sama itulah yang memperbaiki huruf beraksen di Excel, karena itu ia berguna sekaligus menjengkelkan — sebagian besar parser CSV yang baik membuangnya secara otomatis.
Apakah ada standar CSV?
Hanya spesifikasi anjuran dari tahun 2005 yang menjelaskan apa yang dilakukan sebagian besar alat, dan banyak software yang melakukan hal lain. Karena itulah pemisah, tanda kutip, akhir baris, dan encoding semuanya berbeda-beda — dan mendeteksinya, bukan mengasumsikannya, adalah satu-satunya pendekatan yang berhasil pada file sungguhan.
Mengapa satu baris terpecah menjadi beberapa baris di editor teks saya?
Karena kolom yang diberi tanda kutip boleh berisi baris baru — biasanya kolom alamat. Record-nya tetap satu baris; apa pun yang memecah file berdasarkan baris baru akan merusak tepat baris-baris itu, dan karena itulah memecah berdasarkan koma atau baris baru adalah cara yang salah untuk membaca CSV.
Juga layak dibaca
PDF terlalu besar untuk email
Tiga penyebab PDF berukuran besar, dan solusi mana yang cocok untuk file Anda.
Format gambar mana?
Satu pertanyaan menentukannya. JPG, PNG, WebP, dan AVIF dibandingkan secara jujur.
PDF hasil scan dan OCR
Kenapa hasil scan tidak berisi teks, apa yang ditambahkan OCR, dan pengaturan yang menentukan akurasinya.