Este post foi escrito e sugerido por Leonardo Malkes (e pequenos ajustes meus :)
Um cliente que estava precisando desenvolver uma app para Android e me perguntou se era possível criar arquivos do Excel a partir da aplicação. De imediato eu respondi que não sabia, mas complementei a frase dizendo: “Hoje em dia em programação quase tudo é possível”. Entretanto, alguns dias depois esse mesmo cliente disse que não seria mais necessário gerar o arquivo. Mas a minha curiosidade de como fazer isso já havia sido atiçada.
Após algumas pesquisas na internet, encontrei uma biblioteca Java, open source e bem documentada (com JavaDoc incluso), chamada JExcelAPI. Baixe a última versão, vamos aos trabalhos!
Crie um novo projeto Android e na raiz do projeto adicione uma pasta chamada lib, e dentro dela coloque o arquivo jxl.jar que está no zip da biblioteca.
Para trabalhar com biblioteca de terceiros, precisamos adicioná-la ao Build Path do projeto. Para fazer isso, clique com o botão direito sobre o arquivo da biblioteca e selecione Build Path > Add to Build Path. Em seguida, clique com o botão direito sobre o projeto e selecione Build Path > Configure Build Path. Na janela que for exibida, na aba Order and Export, marque a biblioteca jxl.jar.
Agora estamos prontos para iniciar o projeto. Lembrando que se queremos criar um arquivo no Excel, o mais natural é gravá-lo no cartão de memória do aparelho (apesar de ser possível gravar na memória interna do aparelho). Para fazer isso precisamos adicionar a permissão WRITE_EXTERNAL_STORAGE no AndroidManifest.xml.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>Para criar o arquivo, usamos a classe File (do Java padrão) definindo o local e o nome do arquivo. Não esquecendo de importar o java.io.
File file = new File( getExternalFilesDir(null), "MeuArquivoXLS.xls");Isso criará o arquivo MeuArquivoXLS.xls no diretório Android/data/pacote.sua.app/files do cartão de memória. O método getExternalFilesDir é da classe Context, então parta do pressuposto que estou chamando o código acima de uma Activity. Esse método fará com que, se a aplicação for excluída, os arquivos da mesma também sejam. Caso não queira que isso aconteça, você pode usar o método Environment.getExternalStorageDirectory() que salvará o arquivo na raiz do cartão de memória.
Em seguida vamos criar o Excel Workbook, que é uma pasta de trabalho do Excel que pode conter uma ou mais Planilhas (Sheets). Observe que para criar o workbook usamos a classe WritableWorkbook que não tem construtor, e faz uso do FactoryMethod createWorkbook.
WritableWorkbook wb = null; try { wb = Workbook.createWorkbook(file); } catch (IOException e) { e.printStackTrace(); }Já com o workbook criado, é preciso criar a planilha(Sheet). O método createSheet recebe dois parâmetros: o nome da planilha e a posição que ela vai ficar dentro do workbook.
wb.createSheet("Planilha", 0);Agora para escrever nesta planilha precisamos pegar a instância de um WritableSheet através do método getSheet do objeto WorkBook. Esse método recebe como parâmetro o índice na planilha ou o nome.
WritableSheet plan = wb.getSheet(0);Com a instância da planilha, podemos inserir valores nas células usando o método addCell que recebe um WritableCell que é uma interface. A classe Label representa um texto simples e implementa esta interface. Para criar um Label em uma célula, passamos coluna, linha e o valor da célula.
Label label = new Label(0,0,"Primeira célula"); // Como o método pode levantar exceção // iremos coloca-lo dentro de um try/catch try { plan.addCell(label); } catch (RowsExceededException e1) { e1.printStackTrace(); } catch (WriteException e1) { e1.printStackTrace(); }Pronto agora é só gravar o fechar o workbook.
wb.write(); wb.close();
Feito isso, basta rodar a aplicação e testar o código. Para pegar o arquivo, você pode utilizar a janela File Explorer da perspectiva DDMS. Navegue até o diretório e selecione o botão Pull File from Device.
Dúvidas? Mandem pra Leo :)
4br4ç05,
nglauber