Я ищу способ конвертировать xlsx файлы в файлы csv в linux, я не хочу использовать PHP/Perl или что-то в этом роде, так как я ищу обработку нескольких миллионов строк, поэтому мне нужно что-то быстрое, Я нашел программу в репозитории ubuntu под названием xls2csv, но он будет преобразовывать только файлы xls (Office 2003) (которые я использую в настоящее время), но мне нужно добавить поддержку новых файлов excel, любых идей?
Преобразование xlsx в csv в командной строке linux
Ответ 1
Приложение Gnumeric поставляется с утилитой командной строки, называемой ssconvert, который может конвертировать между различными форматами электронных таблиц:
$ ssconvert Book1.xlsx newfile.csv
Using exporter Gnumeric_stf:stf_csv
$ cat newfile.csv 
Foo,Bar,Baz
1,2,3
123.6,7.89,
2012/05/14,,
The,last,Line
Для установки на Ubuntu:
apt-get install gnumeric
Для установки на Mac:
brew install gnumeric
Ответ 2
Вы можете сделать это с помощью LibreOffice:
libreoffice --headless --convert-to csv $filename --outdir $outdir
По непонятным мне причинам, возможно, потребуется запустить это с помощью sudo. Вы можете заставить LibreOffice работать с sudo, не требуя пароля, добавив эту строку в файл sudoers:
users ALL=(ALL) NOPASSWD: libreoffice
Ответ 3
Если у вас уже есть рабочая среда, то я уверен, что Gnumeric/LibreOffice будет работать хорошо, но на безголочном сервере (например, Amazon Web Services) им потребуются десятки зависимостей, которые также необходимо установить.
Я нашел эту альтернативу Python:
https://github.com/dilshod/xlsx2csv
$ easy_install xlsx2csv
$ xlsx2csv file.xlsx > newfile.csv
Взял 2 секунды, чтобы установить и работает как шарм.
Если у вас есть несколько листов, вы можете экспортировать все одновременно или по одному:
$ xlsx2csv file.xlsx --all > all.csv
$ xlsx2csv file.xlsx --all -p '' > all-no-delimiter.csv
$ xlsx2csv file.xlsx -s 1 > sheet1.csv
Он также ссылается на несколько альтернатив, построенных в Bash, Python, Ruby и Java.
Ответ 4
Используйте csvkit
in2csv data.xlsx > data.csv
Подробнее об их отличных docs
Ответ 5
В bash я использовал эту команду libreoffice для преобразования всех моих xlsx файлов в текущий каталог:
for i   in *.xlsx; do  libreoffice --headless --convert-to csv "$i" ; done
Он обрабатывает пробелы в имени файла.
Повторил еще несколько лет спустя, и это не сработало. Этот поток дает несколько советов, но самым быстрым решением было запустить его как root (или запустить sudo libreoffice). Не элегантный, но быстрый.
Используйте команду scalc.exe в Windows
Ответ 6
Другой вариант - использовать R через небольшую обертку bash для удобства:
xlsx2txt(){
echo '
require(xlsx)
write.table(read.xlsx2(commandArgs(TRUE)[1], 1), stdout(), quote=F, row.names=FALSE, col.names=T, sep="\t")
' | Rscript --vanilla - $1 2>/dev/null
}
xlsx2txt file.xlsx > file.txt
Ответ 7
Если в файле .xlsx имеется много листов, для получения нужного вам листа можно использовать флаг -s. Например:
xlsx2csv "my_file.xlsx" -s 2 second_sheet.csv
 second_sheet.csv будет содержать данные второго листа в my_file.xlsx.
Ответ 8
Если вы в состоянии запустить командную строку Java, вы можете сделать это с помощью Apache POI HSSF Excel Extractor. Он a main метод, который говорит, что это экстрактор командной строки. Кажется, это просто сваливает все. Они указывают на этот пример, который преобразуется в CSV. Вам нужно будет скомпилировать его, прежде чем вы сможете его запустить, но он также имеет метод main, поэтому вам не нужно делать много кодирования, чтобы заставить его работать.
Другой вариант, который может лететь, но потребует некоторой работы на другом конце, - сделать ваши файлы Excel доступными вам как данные Excel XML или XML-таблица любых вызовов MS, которые форматируются в эти дни. Он откроет целый новый мир возможностей для вас, чтобы вырезать и нарезать его так, как вы хотите.
Ответ 9
Используя приложение Gnumeric, которое приходит, которое утилита командной строки ssconvert действительно супер проста:
find . -name '*.xlsx' -exec ssconvert -T Gnumeric_stf:stf_csv {} \;
и все готово!
Ответ 10
Как говорили другие, libreoffice может конвертировать xls файлы в csv. Проблема для меня - выбор листа.
Этот libreoffice Python script отлично справляется с преобразованием одного листа в CSV.
Использование:
./libreconverter.py File.xls:"Sheet Name" output.csv
Единственный недостаток (на моем конце) заключается в том, что --headless, похоже, не работает. У меня есть окно LO, которое отображается на секунду, а затем завершается. 
Это хорошо со мной, это единственный инструмент, который быстро выполняет эту работу.
Ответ 11
Вы можете попробовать таблицу Open/LibreOffice. Это не инструмент командной строки, но есть хорошие шансы, что они будут поддерживать xlsx. См. www.libreoffice.org/features/calc/. Он упоминает поддержку xlsx.
