Я ищу способ конвертировать 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.