Skip to content
Back to Blog
how-to-convert

Cara Mengonversi XLSX ke CSV (dan Menghindari Masalah Encoding)

2026-05-17 8 min read

Mengapa Konversi XLSX ke CSV Sering Bermasalah

Kelihatannya sangat mirip. XLSX dan CSV kan sama-sama tabel data, ya? Tapi di baliknya, keduanya adalah dua hal yang sangat berbeda. File XLSX adalah paket yang kompleks—arsip zip berisi dokumen XML yang menyimpan banyak sheet, format sel yang kaya, rumus, dan bahkan gambar. Sedangkan CSV hanyalah teks. Baris diakhiri dengan baris baru (newline), kolom dipisahkan oleh karakter seperti koma. Saat kamu meratakan struktur XLSX yang kaya itu menjadi teks biasa, kamu cari masalah. Masalah terbesar datang dari ketidakcocokan encoding. Jika spreadsheet kamu berisi karakter khusus—huruf beraksen seperti é atau ñ, simbol mata uang seperti €, atau teks non-Latin—output CSV-nya wajib menggunakan encoding karakter yang benar, yang hampir selalu UTF-8. Banyak tool yang secara default menggunakan encoding lama seperti Windows-1252, yang akan merusak karakter-karakter itu menjadi tanda tanya. Nama pelanggan seperti 'José García' menjadi 'Jos? Garc?a', dan proses impor CRM kamu pun gagal total. Konflik delimiter adalah masalah klasik lainnya. Jika CSV kamu menggunakan koma untuk memisahkan kolom, apa yang terjadi pada sel yang berisi koma, seperti alamat '14 Oak Street, Suite 200'? Penulis CSV yang baik akan membungkus nilai itu dengan tanda kutip ganda. Tapi jika datanya sendiri mengandung tanda kutip ganda, karakter itu harus di-escape dengan menggandakannya ('He said "hello"' menjadi '"He said ""hello"""'). Mengetahui di mana letak ranjau-ranjau ini sebelum mulai mengonversi akan menghemat waktumu berjam-jam dari proses debugging yang menyakitkan.

Keputusan Encoding: UTF-8, UTF-8 BOM, atau yang Lain

Sebelum kamu mengonversi apa pun, buat satu keputusan krusial: encoding apa yang dibutuhkan oleh sistem tujuanmu? Kalau ini benar, kamu akan terhindar dari sebagian besar masalah konversi. Untuk hampir semua sistem modern, jawabannya adalah UTF-8. Titik. Database, skrip Python, API web—semuanya mengharapkan dan menangani UTF-8 dengan sempurna. Jika kamu memasukkan CSV ke pandas dengan `pd.read_csv()`, UTF-8 adalah default-nya dan itu langsung berfungsi. Hal yang sama berlaku untuk perintah `COPY` di PostgreSQL atau `LOAD DATA INFILE` di MySQL saat kamu menentukan `CHARACTER SET utf8mb4`. Lalu ada UTF-8 dengan BOM (Byte Order Mark). Varian ini menambahkan tiga byte tak terlihat (0xEF, 0xBB, 0xBF) di awal file. Kenapa ini ada? Untuk membantu Microsoft Excel. Di Windows, Excel sering mengasumsikan sebuah CSV di-encode dengan Windows-1252 kecuali ia melihat BOM ini, yang membuat karakter spesial jadi kacau. Jadi, aturannya sederhana: jika manusia akan membuka CSV langsung di Excel, gunakan UTF-8 BOM. Jika yang akan membacanya adalah skrip atau program, gunakan UTF-8 biasa, karena BOM itu bisa membuat banyak parser tersendak. Encoding lama seperti Windows-1252 (atau ANSI) dan ISO-8859-1 (Latin-1) adalah peninggalan masa lalu. Keduanya hanya mendukung karakter Eropa Barat dan akan merusak data dari bahasa lain. Kamu mungkin akan menemuinya di sistem lawas, tapi jangan pernah memilihnya untuk alur kerja yang baru. Konverter [XLSX ke CSV](/convert/xlsx-to-csv) dari CocoConvert memungkinkan kamu memilih encoding di awal, sebuah fitur krusial yang anehnya sering dihilangkan oleh banyak tool gratis. Cukup pilih UTF-8 untuk sistem dan UTF-8 BOM untuk Excel.

Langkah-langkah: Mengonversi XLSX ke CSV dengan CocoConvert

Prosesnya sederhana, tapi detail-detail kecillah yang menentukan. Beberapa pengaturan di sini akan menentukan keberhasilan atau kegagalan output akhirmu. 1. Buka [halaman XLSX ke CSV CocoConvert](/convert/xlsx-to-csv) dan unggah file kamu. Kamu bisa memproses file hingga 50 MB tanpa akun, dan file yang lebih besar hanya memerlukan pendaftaran gratis. Jika XLSX kamu benar-benar raksasa—beberapa ekspor perusahaan bisa berukuran ratusan megabita—kamu perlu menggunakan tool desktop seperti LibreOffice Calc atau skrip, yang akan kita bahas nanti. 2. Pilih sheet yang akan diekspor. File XLSX bisa berisi banyak sheet, tapi CSV hanya bisa mewakili satu. CocoConvert menampilkan semua sheet dari file kamu dalam daftar dropdown. Jika kamu perlu mengekspor semua sheet, kamu harus mengonversinya satu per satu. 3. Pilih delimiter kamu. Koma adalah standar, tapi ini pilihan yang buruk jika datamu penuh dengan koma (misalnya di deskripsi teks bebas atau alamat). Di Eropa, titik koma (semicolon) adalah alternatif yang umum dan seringkali lebih aman. Tab-separated (TSV) adalah pilihan bagus lainnya jika teksmu mengandung koma dan titik koma. 4. Atur encoding. Kamu sudah tahu aturannya: UTF-8 untuk penggunaan terprogram, UTF-8 BOM jika file tersebut ditujukan untuk Excel seseorang. 5. Tentukan cara menangani rumus. CocoConvert mengekspor *nilai* hasil perhitungan sel, bukan rumusnya itu sendiri. Sel dengan `=SUM(A1:A10)` yang menampilkan `4500` akan menjadi `4500` di CSV. Inilah yang kamu inginkan 99% dari waktu. Jika kamu benar-benar butuh teks rumusnya, seharusnya kamu tidak mengonversi ke CSV. 6. Unduh dan verifikasi. **Jangan buka CSV di Excel untuk memeriksanya.** Percayalah. Buka dulu di editor teks sungguhan, seperti Notepad++ di Windows atau BBEdit di Mac. Tool ini menunjukkan teks mentahnya dan memungkinkan kamu mengonfirmasi bahwa encoding-nya sudah benar. Cari baris dengan karakter spesial dan pastikan tampilannya benar sebelum kamu berpikir untuk mengimpornya ke sistem tujuanmu.

Melakukannya di Excel dan LibreOffice (Saat Kamu Butuh Kontrol Lokal)

Terkadang kamu harus mengonversi secara lokal. Mungkin file-nya berisi data sensitif yang tidak bisa diunggah, atau ukurannya raksasa 200 MB yang membuat tool online kewalahan. Baik Excel maupun LibreOffice bisa menyelesaikannya, tapi masing-masing punya keunikannya sendiri. Di Microsoft Excel (Office 365 / Excel 2019+): Buka XLSX kamu, navigasi ke File → Save As, dan di dropdown 'Save as type', pilih 'CSV UTF-8 (Comma delimited) (*.csv)'. Opsi ini, yang *akhirnya* ditambahkan Microsoft di Excel 2016, menyimpan dengan benar menggunakan encoding UTF-8 BOM. Hati-hati jangan memilih opsi 'CSV (Comma delimited)' biasa; itu akan menyimpan menggunakan encoding kuno Windows-1252, sebuah jebakan yang telah memerangkap banyak developer. Excel akan memperingatkan bahwa hanya sheet aktif yang disimpan. Klik OK dan ulangi untuk sheet lain yang kamu butuhkan. Di LibreOffice Calc (tool lintas platform gratis yang fantastis): Buka file, pergi ke File → Save a Copy... (menggunakan 'Save As' akan mengubah file-mu saat ini). Pilih 'Text CSV (.csv)' sebagai format dan konfirmasi kamu ingin Keep Current Format. Ini akan memunculkan dialog yang canggih dengan opsi eksplisit. Kamu bisa mengatur Field Delimiter, Text Delimiter (biarkan tanda kutip ganda), dan yang terpenting, Character Set. Pilih 'Unicode (UTF-8)'. LibreOffice dengan benar menghasilkan file UTF-8 biasa tanpa BOM, membuatnya ideal untuk penggunaan terprogram. Inilah keterbatasan kedua tool ini: keduanya tidak memberimu kontrol atas bagaimana nilai null, sel kosong, atau boolean direpresentasikan. Jika proses selanjutnya membutuhkan string kosong untuk null alih-alih tidak ada apa-apa, atau mengharapkan `1`/`0` alih-alih `TRUE`/`FALSE`, kamu kurang beruntung. Kamu harus membuat skrip untuk membersihkan CSV-nya nanti atau menggunakan tool yang lebih canggih dari awal.

Konversi dengan Skrip Python (Untuk Alur Kerja Berulang)

Saat kamu harus mengonversi jenis file XLSX yang sama berulang kali—seperti laporan mingguan dari sistem akuntansi—klik manual adalah resep untuk kesalahan. Skrip Python sederhana lebih cepat, lebih andal, dan berjalan dalam hitungan detik. Pertama, kamu akan butuh library `openpyxl` dan `pandas`. Instal dengan `pip install openpyxl pandas`. Lalu, kodenya sangat rapi: ```python import pandas as pd df = pd.read_excel('report.xlsx', sheet_name='Sales Data', engine='openpyxl') df.to_csv('report.csv', index=False, encoding='utf-8') ``` Parameter `sheet_name` bisa berupa nama sheet dalam bentuk string atau nomor indeksnya yang berbasis nol. Jangan lupa `index=False`; ini mencegah pandas menulis nomor barisnya sendiri di kolom pertama, yang pasti akan membingungkan sebagian besar tool impor. Untuk parameter `encoding`, `'utf-8'` membuat file UTF-8 standar tanpa BOM. Jika kamu tahu outputnya akan langsung ke pengguna Excel, gunakan `'utf-8-sig'` untuk menyertakan BOM. Pandas juga pintar soal tanggal, mem-parsing-nya menjadi objek `datetime64`. Ia menuliskannya dalam format ISO 8601 (`YYYY-MM-DD HH:MM:SS`), yang disukai sebagian besar database. Jika sistem tujuanmu rewel dan butuh format seperti `MM/DD/YYYY`, cukup tambahkan argumen `date_format='%m/%d/%Y'` ke panggilan `to_csv()` kamu. Untuk file besar (50.000+ baris), `openpyxl` memuat seluruh file ke dalam memori, jadi `pd.read_excel()` bisa lambat. Proses penulisan juga bisa menjadi bottleneck. Jika kamu mengalami keterbatasan memori, kamu bisa menulis CSV dalam beberapa bagian (chunk). Dan jika kamu berurusan dengan file `.xls` kuno, engine `xlrd` lebih cepat, tapi untuk file `.xlsx` modern, tetap gunakan `openpyxl`. Jika kamu punya banyak sheet untuk diekspor, `pd.read_excel('report.xlsx', sheet_name=None)` sangat membantu. Fungsi ini mengembalikan dictionary di mana key-nya adalah nama sheet dan value-nya adalah DataFrame. Kamu kemudian bisa melakukan loop melalui dictionary ini dan menyimpan setiap sheet ke file CSV-nya sendiri—cara sempurna untuk mengotomatiskan ekspor seluruh workbook.

Memvalidasi CSV Kamu Sebelum Masuk ke Database

Sebuah CSV bisa terlihat sempurna dalam pratinjau tapi tetap bisa menghancurkan proses impor databasemu. Siapa pun yang pernah melihat proses impor gagal diam-diam setelah 20 menit tahu betapa menyakitkannya. Beberapa langkah validasi cepat bisa menangkap masalah-masalah kecil ini lebih awal. Pertama, periksa jumlah baris. Jika XLSX kamu punya 12.847 baris data dan satu header, CSV kamu harus punya tepat 12.848 baris. Di Linux atau macOS, `wc -l report.csv` memberimu jawabannya secara instan. Jika angkanya tidak cocok, kemungkinan ada sel yang berisi karakter baris baru (newline)—masalah umum di kolom 'catatan' di mana pengguna sering menekan Enter. Penulis CSV yang baik seharusnya mengutip ini dengan benar, tapi ini adalah titik kegagalan yang sering terjadi. Selanjutnya, periksa secara acak karakter-karakter spesialmu. Cari baris di XLSX asli dengan aksen, simbol mata uang, atau teks non-Latin. Sekarang buka CSV di editor teks yang menampilkan encoding file (VS Code dan Notepad++ bisa melakukannya). Konfirmasi encoding-nya sesuai pilihanmu dan karakter-karakternya ditampilkan dengan benar. Uji delimiter. Jika kamu menggunakan koma, cari di teks mentah koma yang tidak berada di dalam tanda kutip. Perintah `grep` cepat di Linux (`grep -P '(?<!\" ),[^\"\\n]*(?<!\" ),' report.csv`) bisa membantu menemukan baris di mana pengutipan mungkin terlewat, meskipun kamu mungkin perlu menyesuaikan regex untuk datamu yang spesifik. Terakhir, validasi beberapa tipe data kolom. Jika sebuah kolom seharusnya berisi bilangan bulat semua, periksa itu. Di Python, kamu bisa memuat CSV dan memeriksa `pd.read_csv('report.csv')['order_id'].dtype`. Seharusnya hasilnya `int64`. Jika hasilnya `object`, kamu punya masalah—ada karakter teks nyasar, error `#N/A` yang terlewat, atau simbol mata uang yang menyelinap ke dalam sel numerik. Menyisihkan lima menit untuk pemeriksaan ini akan menghemat waktumu berjam-jam dari debugging proses muat data yang gagal.

Kasus-kasus Khusus yang Umum dan Keterbatasan Jujur

Bahkan dengan tool yang tepat, beberapa fitur XLSX memang tidak bisa dipetakan dengan rapi ke dunia CSV yang sederhana. Berikut adalah beberapa jebakan umum. Sel yang digabung (Merged cells): Fitur ini di Excel hanyalah trik visual. Saat kamu mengonversi ke CSV, hanya nilai dari sel kiri atas area yang digabung yang akan bertahan; sel-sel lainnya menjadi kosong. Biar jelas: tidak ada perbaikan otomatis yang bersih untuk ini. Kamu harus membatalkan penggabungan sel (unmerge) di Excel *sebelum* mengonversi (Select All, Format → Cells → Alignment, hilangkan centang Merge cells) dan mengisi sel-sel yang kini kosong secara manual. Beberapa baris header: Seringkali kita melihat laporan dengan dua atau tiga baris header—kategori utama, subkategori, lalu nama kolom yang sebenarnya. Parser CSV dibuat hanya untuk satu baris header. Ini adalah pekerjaan pembersihan manual lainnya; kamu harus menyederhanakan header di XLSX atau menghapus baris ekstra dari CSV sebelum bisa digunakan. Error rumus: Jika sebuah sel di Excel menampilkan `#REF!`, `#DIV/0!`, atau `#VALUE!`, teks persis itulah yang akan ditulis ke CSV kamu. String-string itu akan meracuni kolom numerik mana pun dan menyebabkan error tipe data saat impor. Bersihkan dulu di Excel, baik dengan memperbaiki data sumber atau membungkus rumus dalam fungsi `IFERROR()`. File sangat besar: CocoConvert cukup murah hati, menangani file hingga 50 MB gratis dan 200 MB dengan akun. Untuk yang lebih besar dari itu, tool online tidak praktis. Beralihlah ke metode Python/pandas atau gunakan tool baris perintah LibreOffice (`libreoffice --headless --convert-to csv filename.xlsx`). File XLSX yang dilindungi kata sandi: Tidak ada tool online, termasuk CocoConvert, yang bisa membuka file yang dilindungi kata sandi. Kamu harus menghapus kata sandinya sendiri di Excel (File → Info → Protect Workbook → Encrypt with Password), simpan file, lalu unggah. Gambar dan bagan: Ini akan dibuang begitu saja. Keduanya memang tidak ada dalam format CSV. Jika sheet kamu sebagian besar adalah bagan dengan tabel data kecil, bagan tersebut akan lenyap tak berbekas, hanya menyisakan teksnya. Ini bukan error, hanya keterbatasan fundamental dari format CSV.

Ready to convert?

Try it now — fast, secure, and private.

Convert Now →