Saya mencari cara untuk mengkonversi file xlsx ke file csv di Linux.
Saya tidak ingin menggunakan PHP / Perl atau sesuatu seperti itu karena saya sedang mencari pemrosesan jutaan baris, jadi saya perlu sesuatu yang cepat. Saya menemukan sebuah program di repo Ubuntu yang disebut xls2csv tetapi hanya akan mengonversi file xls (Office 2003) (yang saat ini saya gunakan) tetapi saya memerlukan dukungan untuk file Excel yang lebih baru.
Ada ide?
Jawaban:
The Gnumeric aplikasi spreadsheet hadir dengan utilitas baris perintah yang disebut ssconvert yang dapat mengkonversi antara berbagai format spreadsheet:
Untuk menginstal di Ubuntu:
Untuk menginstal di Mac:
sumber
for f in *.csv; do ssconvert "$f" "${f%.csv}.xlsx"; done
Metode LibreOffice mungkin dapat memproses format lain, tapi saya tidak bisa membuatnya bekerja (itu hanya akan membuka file kosong setiap kali, bahkan dengan--headless
argumen).apt-get install gnumeric --no-install-recommends
. Satu-satunya kelemahan adalah ia mengeluarkan banyak peringatan GConf-WARNING **: Klien gagal terhubung ke daemon D-BUS saat menjalankan. Sederhanassconvert oldfile.xlsx newfile.csv > /dev/null 2>&1
akan melakukan triknya.-S
flag untuk menulis beberapa lembar. Masing-masing pergi ke file sendiri.ssconvert -O "separator=;" -T Gnumeric_stf:stf_assistant file.xlsx fd://1
.Anda dapat melakukan ini dengan LibreOffice:
Untuk alasan yang tidak jelas bagi saya, Anda mungkin perlu menjalankan ini dengan sudo. Anda dapat membuat LibreOffice berfungsi dengan sudo tanpa memerlukan kata sandi dengan menambahkan baris ini ke file sudoers Anda:
sumber
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv $filename
bekerja pada OS X untuk saya.--convert-to "csv:Text - txt - csv (StarCalc):44,34,76,1,1/1"
. Lihat wiki kantor terbuka untuk detailnya.Jika Anda sudah memiliki lingkungan Desktop maka saya yakin Gnumeric / LibreOffice akan bekerja dengan baik, tetapi pada server tanpa kepala (seperti Amazon Web Services), mereka memerlukan banyak dependensi yang juga harus Anda instal.
Saya menemukan alternatif Python ini:
https://github.com/dilshod/xlsx2csv
Butuh 2 detik untuk menginstal dan bekerja seperti pesona.
Jika Anda memiliki beberapa lembar, Anda dapat mengekspor sekaligus, atau satu per satu:
Ia juga menautkan ke beberapa alternatif yang dibangun di Bash, Python, Ruby, dan Java.
sumber
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/prettytable-0.7.2-py2.7.egg/EGG-INFO/top_level.txt'
). Sekarang saya berpikir tentang itu, saya mendapat kesalahan yang samacsvkit
.xlsx2csv
paketnya, jadi Anda tidak perlu menginstalnya secara manualeasy_install
tetapi bisa menggunakan manajer paket Anda.sudo easy_install xlsx2csv
Dalam bash, saya menggunakan perintah libreoffice ini untuk mengonversi semua file xlsx saya di direktori saat ini:
Ini menangani spasi dalam nama file.
Mencoba lagi beberapa tahun kemudian, dan itu tidak berhasil. Utas ini memberikan beberapa kiat, tetapi solusi tercepat adalah berjalan sebagai root (atau menjalankan a
sudo libreoffice
). Tidak elegan, tapi cepat.Gunakan perintah scalc.exe di Windows
sumber
scalc.exe
bukanlibreoffice
. Bekerja untuk saya hari ini di versi LO stabil saat ini.Gunakan csvkit
Untuk detail, periksa dokumen luar biasa mereka
sumber
Opsi lain adalah menggunakan R melalui bungkus bash kecil untuk kenyamanan:
sumber
Jika
.xlsx
file memiliki banyak sheet,-s
flag dapat digunakan untuk mendapatkan sheet yang Anda inginkan. Sebagai contoh:second_sheet.csv
akan berisi data lembar ke-2 dimy_file.xlsx
.sumber
Menggunakan aplikasi spreadsheet Gnumeric yang datang yang mana utilitas commandline bernama ssconvert memang super sederhana:
dan kamu selesai!
sumber
Jika Anda OK untuk menjalankan baris perintah Java maka Anda dapat melakukannya dengan Excel Extractor Apache POI HSSF . Ia memiliki sebuah
main
metode yang mengatakan menjadi extractor baris perintah . Yang ini sepertinya hanya membuang semuanya. Mereka menunjukkan contoh ini yang mengkonversi ke CSV . Anda harus mengkompilasinya sebelum Anda dapat menjalankannya tetapi ia juga memilikimain
metode sehingga Anda tidak perlu melakukan banyak pengkodean per se untuk membuatnya bekerja.Opsi lain yang mungkin terbang tetapi akan membutuhkan beberapa pekerjaan di ujung yang lain adalah untuk membuat file Excel Anda mendatangi Anda sebagai Data XML XML atau XML Spreadsheet dari apa pun MS panggilan format yang hari ini. Ini akan membuka seluruh dunia peluang baru bagi Anda untuk mengiris dan memotongnya seperti yang Anda inginkan.
sumber
Seperti yang orang lain katakan,
libreoffice
dapat mengkonversi file xls ke csv. Masalahnya bagi saya adalah pemilihan lembar.Script Python libreoffice ini melakukan pekerjaan yang baik di mengkonversi satu lembar ke CSV.
Penggunaannya adalah:
Satu-satunya downside (di ujung saya) adalah yang
--headless
tampaknya tidak berhasil. Saya memiliki jendela LO yang muncul sebentar dan kemudian berhenti.Tidak apa-apa dengan saya, itu satu-satunya alat yang melakukan pekerjaan dengan cepat.
sumber