Estou procurando uma maneira de converter arquivos xlsx para arquivos csv no Linux.
Eu não quero usar PHP / Perl ou algo assim, já que estou olhando para processar vários milhões de linhas, então preciso de algo rápido. Encontrei um programa nos repositórios Ubuntu chamado xls2csv, mas ele converterá apenas arquivos xls (Office 2003) (que estou usando atualmente), mas preciso de suporte para os arquivos mais recentes do Excel.
Alguma ideia?
Respostas:
O aplicativo de planilha Gnumeric vem com um utilitário de linha de comando chamado ssconvert, que pode converter entre vários formatos de planilha:
Para instalar no Ubuntu:
Para instalar no Mac:
fonte
for f in *.csv; do ssconvert "$f" "${f%.csv}.xlsx"; done
O método LibreOffice provavelmente poderia processar outros formatos, mas eu não consegui fazê-lo funcionar (ele simplesmente abriria um arquivo em branco toda vez, mesmo com o--headless
argumento).apt-get install gnumeric --no-install-recommends
. A única desvantagem é que ele dispara muitos avisos GConf-WARNING **: O cliente não conseguiu se conectar ao daemon D-BUS durante a execução. Um simplesssconvert oldfile.xlsx newfile.csv > /dev/null 2>&1
fará o truque.-S
sinalizador escreva várias folhas. Cada um vai para seu próprio arquivo.ssconvert -O "separator=;" -T Gnumeric_stf:stf_assistant file.xlsx fd://1
.Você pode fazer isso com o LibreOffice:
Por razões que não estão claras para mim, você pode precisar executar isso com o sudo. Você pode fazer o LibreOffice funcionar com o sudo sem exigir uma senha, adicionando esta linha ao seu arquivo sudoers:
fonte
/Applications/LibreOffice.app/Contents/MacOS/soffice --headless --convert-to csv $filename
trabalhou no OS X para mim.--convert-to "csv:Text - txt - csv (StarCalc):44,34,76,1,1/1"
. Consulte o wiki do escritório aberto para obter detalhes.Se você já possui um ambiente de área de trabalho, tenho certeza que o Gnumeric / LibreOffice funcionaria bem, mas em um servidor sem cabeça (como o Amazon Web Services), eles exigem dezenas de dependências que você também precisa instalar.
Eu encontrei esta alternativa Python:
https://github.com/dilshod/xlsx2csv
Demorou 2 segundos para instalar e funciona como um encanto.
Se você tiver várias planilhas, poderá exportar todas de uma vez ou uma de cada vez:
Ele também vincula a várias alternativas criadas em Bash, Python, Ruby e Java.
fonte
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/prettytable-0.7.2-py2.7.egg/EGG-INFO/top_level.txt'
). Agora que penso nisso, recebi o mesmo erro comcsvkit
.xlsx2csv
pacote, então você não precisa instalá-lo manualmente,easy_install
mas pode usar o seu gerenciador de pacotes.sudo easy_install xlsx2csv
No bash, usei este comando libreoffice para converter todos os meus arquivos xlsx no diretório atual:
Ele cuida dos espaços no nome do arquivo.
Tentei novamente alguns anos depois, e não funcionou. Este tópico fornece algumas dicas, mas a solução mais rápida foi executar como root (ou executar um
sudo libreoffice
). Não é elegante, mas rápido.Use o comando scalc.exe no Windows
fonte
scalc.exe
melhor quelibreoffice
. Trabalhou para mim hoje na versão atual estável do LO.Use csvkit
Para detalhes, verifique seus excelentes documentos
fonte
Outra opção seria usar R através de um pequeno invólucro de bash por conveniência:
fonte
Se o
.xlsx
arquivo tiver muitas planilhas, o-s
sinalizador poderá ser usado para obter a planilha desejada. Por exemplo:second_sheet.csv
conteria dados da 2ª folha emmy_file.xlsx
.fonte
Usando o aplicativo de planilha Gnumeric que vem, um utilitário de linha de comando chamado ssconvert é realmente super simples:
e pronto!
fonte
Se você estiver OK para executar a linha de comando Java, poderá fazê-lo com o Excel Extractor do Apache POI HSSF . Ele tem um
main
método que diz ser o extrator de linha de comando . Este parece apenas despejar tudo. Eles apontam para este exemplo que se converte em CSV . Você precisaria compilá-lo antes de poder executá-lo, mas ele também possui ummain
método, portanto você não precisará codificar muito por si só para fazê-lo funcionar.Outra opção que pode funcionar, mas exigirá algum trabalho do outro lado, é fazer com que seus arquivos do Excel cheguem até você como Dados XML do Excel ou Planilha XML do que a MS chamar nesse formato hoje em dia. Isso abrirá um novo mundo de oportunidades para você cortar e cortar da maneira que desejar.
fonte
Como outros disseram,
libreoffice
pode converter arquivos xls para csv. O problema para mim foi a seleção da folha.Esse script Python do libreoffice faz um bom trabalho na conversão de uma única planilha para CSV.
O uso é:
A única desvantagem (do meu lado) é que
--headless
parece não funcionar. Eu tenho uma janela LO que aparece por um segundo e sai.Tudo bem para mim, é a única ferramenta que faz o trabalho rapidamente.
fonte