Convertendo arquivos de Microsoft Excel (extensão .xls) em arquivos .csv (Comma Separated Values) – Parte 2



Hoje vou falar um pouco sobre meu trabalho com banco de dados e vou retomar um assunto que mencionei nesse post.  Por essa razão, chamei esse post de “Parte 2”. Vocês vão ver que é uma repaginada, uma nova versão com mais informações e mais detalhes.

Eu trabalho com muitas pastas de trabalho de Microsoft Excel (extensão .xls ou .xlsx). São arquivos muito pesados e tratam-se de um formato que não é muito querido por meteorologistas. A explicação é fácil: lidamos com um volume muito grande de dados, dados esses de muitas variáveis meteorológicas. O Excel não é muito adequado para trabalhar com esse tipo de dado. Além disso, utilizamos programas que leem dados apenas em formato texto, seja esse formato o CSV ou o ASCII.

Quem usa Linux pode ter a opção de usar o xls2csv, um comando que você instala e pode usar no terminal, facilmente. Esse comando permite que você converta o arquivo .xls para csv (Comma Separated Values) facilmente, podendo por exemplo fazer a conversão em lotes usando uma rotina do shell.

Pessoal, aqui cabe uma observação: não sei o nome técnico das coisas.😂 Mas quem ler vai entender o que quero dizer ao longo do texto.De qualquer maneira, sempre temos os comentários, então me escrevam caso algo não tenha ficado claro.

Só que temos um grande problema com o comando xls2csv: existem duas opções, dois pacotes que permitem o mesmo comando. E como tudo na vida, há pontos negativos e positivos para cada um desses pacotes. Nesse post, vou falar um pouco de minha experiência no uso dos dois pacotes e vou ajudar você a tomar uma decisão sobre qual deles instalá-lo.

Pacote 1:  xls2csv (por V.B.Wagner o ‘a do catdoc’)

Clique aqui  para conhecer a página do projeto (e aqui para baixar a source diretamente da página do projeto). Se você usa Ubuntu, como é meu caso, basta digitar o seguinte comando para instalar:

1 $ sudo apt-get install catdoc

A instalação é muito fácil, não é necessário nenhum módulo adicional ou coisa do tipo.

Esse pacote contém também o comando catdoc, que faz um ‘dump’ de todo o conteúdo de um arquivo .doc para um arquivo de texto simples. O comando do xls2csv é basicamente o indicado abaixo:

1 $ xls2csv myfile.xls > myfile.csv

Ou seja, o conteúdo do arquivo myfile.xls vai ser “impresso” em um arquivo de texto simples, com valores separados por vírgulas (csv), que aqui no exemplo chamo de myfile.csv.

Há opções mais “sofisticadas” para esse comando, indicadas no manual do comando.

Eu diria que trata-se de um comando fácil de usar e lembrar: não tem “frescura”, não tem opção demais para escrever. Com o exemplo mostrado anteriormente, ele pega todo o conteúdo da pasta de trabalho .xls. Então se sua pasta de trabalho tem várias abas (várias planilhas), ele vai “imprimi-las” na sequência em que elas aparecem na pasta de trabalho. Simples assim.

É um comando muito rápido. Eu processei cerca de 960 pastas de trabalho com cerca de 80 planilhas cada uma e isso demorou menos de 2 minutos.

Como pontos negativo, eu diria que esse comando não permite que você escolha apenas uma planilha (uma aba) da pasta de trabalho. As vezes você tem uma pasta de trabalho com várias planilhas, mas apenas uma dessas planilhas te interessa. Então você terá que criar um novo programa só para fazer o recorte daquilo que você precisa.

Além disso, alguns usuários já reclamaram que essa versão do xls2csv se confunde com informações sobre datas presentes nos arquivos (eu mesma já tive problemas). E aqui, também é apontado que o programa se confunde todo com alguns caracteres especiais e planilhas com fórmulas (problema que também tive).

Vamos falar agora do Pacote 2, uma outra opção de xls2csv.

Pacote 2:  xls2csv (por Ken Prows, também conhecido como xls2csv em Perl)

Essa opção é boa para você que quer converter uma planilha específica de uma pasta de trabalho, coisa que o pacote do catdoc (Pacote 1) não faz, como mencionei acima.

Esse aqui é um pouco mais chato para instalar, mas nada absurdo também.

A página do projeto é essa e o pacote para download direto é esse. Depois de baixar o pacote, para instalá-lo basta seguir os passos abaixo:

1 $ perl Makefile.PL
1 $ make
1 $ make test
1 $ make install

Observe que esse é um script em Perl e usa diversos módulos de Perl para funcionar. Se der algum problema durante a instalação, é provável que você tenha que instalar os módulos faltantes e recomeçar. Eu tive que instalar os seguintes módulos:

$ perl -MCPAN -e "install Locale::Recode"
$ perl -MCPAN -e "install Unicode::Map"
$ perl -MCPAN -e "install Spreadsheet::ParseExcel"
$ perl -MCPAN -e "install Spreadsheet::ParseExcel::FmtUnicode" # should be included with Spreadsheet::ParseExcel
$ perl -MCPAN -e "install Text::CSV_XS"

Depois que os instalei, tentei instalar essa versão do xls2csv novamente e finalmente deu certo. Mais informações sobre esses módulos aqui nessa página.

Essa versão tem dois pontos negativos, pelo o que pude observar durante o uso. O principal deles é o tempo. Demora demais para converter as pastas de trabalho, muito mais do que o Pacote 1. Além disso, o comando não é fácil e simples. Como exemplo de uso, veja esse exemplo em que a planilha myfile.xls tem caracteres dentro do padrão character set WINDOWS-1252 e será convertida em um arquivo .csv com o padrão UTF-8.

 $ xls2csv -x "myfile.xls" -b WINDOWS-1252 -c "myfile.csv" -a UTF-8

É importante destacar que se a pasta de trabalho myfile.xls possuir várias planilhas, apenas a primeira planilha (primeira aba) será a convertida, por default. Na página do projeto há todas as opções de conversão, incluindo a explicação de como discriminar qual planilha da pasta de trabalho será a convertida.

Leia também esse texto que menciona os dois pacotes e os prós e contras de cada um. E nesse outro texto, o assunto também é tratado.

Eu preciso dos dois comandos instalados na minha máquina. Como faço? 

5e679c8240f04370c3d456cf06326938

Querida leitora e leitor, juro para vocês que se fizesse drag king, eu seria o MacGyver. Porque eu faço umas coisas meio estranhas no meu dia a dia para que eu consiga resolver meus problemas. Não sei se são “as melhores coisas”, mas meus problemas são resolvidos 😂. Mas não faço nada de ilegal (eu acho).

Por alguma razão bizarra envolvendo meus refinados dotes de programadora, tive que ter as duas versões do xls2csv instaladas na minha máquina. A maior parte dos meus programas usava a versão do Pacote 2, porém havia um programa muito bonito (que não foi feito por mim 😂) que usava a versão do Pacote 1. Daí o que fiz?

Instalei primeiro a versão do Pacote 1. Então fui na pasta /usr/bin (que se não me engano é a pasta onde o comando fica instalado) e mudei o nome para xls2csv_wagner. Claro que é necessário ser root para fazer isso.

Em seguida, instalei o Pacote 2 e renomeei todas as menções que o programa muito bonito fazia ao xls2csv, substituindo-as por  xls2csv_wagner.

Se essa é a melhor decisão ou a atitude mais inteligente? Eu não sei dizer. Só sei dizer que funcionou. 😂