Mostrando postagens com marcador XLS. Mostrar todas as postagens
Mostrando postagens com marcador XLS. Mostrar todas as postagens

quarta-feira, 13 de junho de 2012

Criando arquivos Excel no Android


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