Saya perlu mengonversi semua lembar file .xls / .xlsx menjadi .csv. Ini akan dilakukan pada semua file .xls di semua direktori dan sub-direktori (secara rekursif).
Langkah 1 : Dapatkan nama-nama sheet dari semua .xls ke dalam .csv menggunakan:
for file in $(find . -name '*.xls' -o -name '*.xlsx');do in2csv -n "$file" > ${file%.xls}-sheetnames-list.csv; done
filename-sheetnames-list.csv
dapat bertindak sebagai daftar:
sheetname1
sheetname2
sheetname3
Langkah 2 : Kode untuk mengonversi lembar tertentu menjadi .csv menggunakan in2csv adalah:
in2csv --sheet "SHEETNAME" filename.xls > filename-SHEETNAME.csv
Bagaimana saya bisa mendapatkan setiap sheetname dalam .xls / x dan menulis setiap sheet secara terpisah untuk semua direktori yang mengandung .xls / x?
in2csv --write-sheets "-" filename.xls > filename-sheet1.csv filename-sheet2.csv ....
memberikan output hanya pada sheet1.csv, tidak yakin bagaimana mendapatkan semua sheet dari ini.
command-line
csv
xls
csheth
sumber
sumber
find
setiap.xls{,x}
dan menggunakan setiap lembar-exec
?Jawaban:
Anda bisa meletakkan lingkaran di dalam lingkaran lain.
Untuk menghindari kesalahan, jangan gunakan
for
denganfind
hasil.sumber
.xls
in2csv --write-sheets "-" filename.xls > sheetname.csv
hanya memberikan lembar pertama. Saya tidak tahu info tambahan apa yang ditambahkan untuk menulis semua lembar. Itu akan memberi kami petunjuk untuk memperbaiki kode Anda.pip install csvkit -U
. Saya pikir cara kerjanya tidak seperti yang Anda suka, dengan skript sederhana dari opsi 1 Anda memiliki lebih banyak cara untuk mengontrol output dan nama file dll.--write-sheets
Mungkin Anda dapat mengatur opsi alternatif ini sebagai jawaban lain ... Saya akan menerima opsi pertama sebagai jawabannya. Terima kasih @RoVoMelewati mencari dan menggunakan bash:
sumber
filename-{}.csv
mengandung data. Saya seorang pemula dan sepertinya tidak dapat menemukan kesalahan dengan mengedit skrip dan membaca. Beberapa bantuan?xargs
. Diperbaiki, tidak seanggun sekarang.xargs
dan>
itu jahat :-P. Itu sebabnya saya lebih suka loop lain, lebih sedikit rawan kesalahan.versi csvkit> 1.0.2 memiliki fungsi bawaan untuk menulis semua sheet:
Jadi, Anda bisa mencoba yang berikut:
catatan:
Ini sepertinya tidak bekerja 100% seperti yang diharapkan. Tetapi patut dicoba dan karena ini adalah versi pertama dengan opsi itu mungkin di versi mendatang implementasinya lebih baik / mudah.
sumber
Gunakan
Gnumeric
:untuk mendapatkan satu
csv
file per lembar.sumber