Конвертировать xlsx в xls в сценарии оболочки linux

14

Мне нужно преобразовать файл ".xlsx" в ".xls", используя команду оболочки.

В моей работе мы в настоящее время используем команду xlsx2csv, но теперь требования были изменены, и нам нужно преобразовать все файлы ".xlsx" в файлы ".xls" для дальнейшего расчета.

Для этого кто-то из моих сотрудников разработал одну команду, которая может конвертировать ".xlsx" в ".xls", но она применима только для одного листа.

У нас есть несколько листов в одном файле.

Заранее спасибо....

Прем Джоши
источник
Это также можно сделать с помощью библиотеки pyxl, это работает наоборот: stackoverflow.com/questions/9918646/how-to-convert-xls-to-xlsx
Марк

Ответы:

20

Если вы устанавливаете LibreOffice, вы можете использовать следующую команду:

libreoffice --headless --convert-to xls myfile.xlsx

или просто:

libreoffice --convert-to xls myfile.xlsx

в последней версии (> = 4.5), где --convert-toподразумевается --headless.

Это создаст файл myfile.xls и сохранит исходный файл myfile.xlsx, поэтому вам, вероятно, потребуется выполнить очистку после проверки успешности преобразования.

forquare
источник
Эта опция очень хороша, но я думаю, что есть одна проблема, она открывает экземпляр libreoffice и затем конвертирует его в файл ".xls". Есть ли другой вариант, который не откроет libreoffice и все еще сможет конвертировать в файл ".xls"? Можете ли вы помочь мне с этим ? @forquare
Прем Джоши
1
Страница руководства @PremJoshi гласит: «[--convert-to] подразумевает - без головы». поэтому графический интерфейс не открывается. Однако, когда вы запускаете его в первый раз после загрузки, он может показывать заставку или что-то в этом роде, пока регистрирует службы (в зависимости от вашего рабочего стола).
lgeorget
1
@Igeorget! опция "- Безголовый" у меня сработала! это был точный ответ на мой вопрос.
Прем Джоши
3
Сделанный --convert-toподразумеваемый коммит--headless - gerrit.libreoffice.org/… (версия 4.4). В предыдущих версиях оба варианта должны быть пропущены.
lgeorget,
1
Помните о предельном числе строк формата 65535 xls, так как эта команда не выводит никаких предупреждающих сообщений, если файл xlsx превышает это ограничение (будет выведен файл строки 65535, который не соответствует оригиналу без предупреждения)
golimar
6

Вы также можете попробовать ssconvertинструмент сопутствующего конвертера gnumeric

ssconvert in.xlsx out.xls

(как обычно, см. man ssconvert)

Для нормальных случаев это нормально. Если входной файл очень продвинут в обоих (libreoffice и gnumeric) конвертерах, некоторые детали могут быть потеряны.

JJoao
источник