Converter xlsx em xls no script shell linux

14

Eu preciso converter o arquivo ".xlsx" para ".xls" usando o comando shell.

No meu trabalho, atualmente estamos usando o comando xlsx2csv, mas agora o requisito foi alterado e precisamos converter todos os arquivos ".xlsx" em arquivos ".xls" para cálculos adicionais.

Para isso, alguém do meu trabalho desenvolveu um comando que pode converter ".xlsx" para ".xls", mas isso é aplicável a apenas uma planilha.

Temos várias planilhas em um arquivo.

Desde já, obrigado....

Prem Joshi
fonte
Ele também pode ser feito usando a biblioteca pyxl, este faz o oposto: stackoverflow.com/questions/9918646/how-to-convert-xls-to-xlsx
Mark

Respostas:

20

Se você instalar o LibreOffice, poderá usar o seguinte comando:

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

ou apenas:

libreoffice --convert-to xls myfile.xlsx

na versão recente (> = 4.5) onde --convert-toimplica --headless.

Isso criará o myfile.xls e manterá o myfile.xlsx original - então você provavelmente precisará fazer uma limpeza depois de validar a conversão.

forquare
fonte
Esta opção é muito boa, mas acho que há um problema, ele abre a instância do libreoffice e depois a converte no arquivo ".xls". Existe alguma outra opção que não abra o libreoffice e ainda possa converter para o arquivo ".xls"? Você pode me ajudar com isto ? @forquare
Prem Joshi
1
A página do Man @PremJoshi diz: "[--converter para] implica - sem cabeça". portanto, a GUI não é aberta. No entanto, quando você o inicia pela primeira vez após a inicialização, ele pode exibir uma tela inicial ou algo assim enquanto registra serviços (dependendo da área de trabalho).
lgeorget
1
@Igeorget! A opção "--headless" funcionou para mim! essa foi a resposta exata para minha pergunta.
precisa
3
O commit que --convert-toimplicou --headlessé gerrit.libreoffice.org/… (versão 4.4). Nas versões anteriores, as duas opções precisam ser aprovadas.
lgeorget
1
Esteja ciente do limite de linhas do formato xls 65535, pois esse comando não imprime nenhuma mensagem de aviso se o arquivo xlsx exceder esse limite (ele produzirá um arquivo de linha 65535 que não corresponde ao original, sem aviso)
golimar
6

você também pode tentar ssconverta ferramenta de conversão complementar do gnumeric

ssconvert in.xlsx out.xls

(como normalmente, veja man ssconvert)

Para casos normais , isso é bom. Se o arquivo de entrada for muito avançado nos conversores baseados em (libreoffice e gnumeric), alguns detalhes poderão ser perdidos.

JJoao
fonte