1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Leitura e Escrita utilizando JExcel

Olá,

Estou fazendo uma algoritmo simples, para ler uma planilha excel, inserir alguns registro e salvar a planilha alterada.

Para escrever meu código, tomei como base o exemplo de escrita disponibilizado junto ao pacote do JExcel.

Dessa forma tenho um método que é responsável por ler a planilha, aplicar o conteúdo, escrever esse conteúdo na planilha e salva-la.

        public void gerarPlanilhaPreenchida(String inputFile, String outputFile) throws IOException, RowsExceededException, WriteException{

        File inputTemplate = new File(inputFile);
        File outputTemplate = new File(outputFile);

        Workbook planilhaTemplate;
        WritableWorkbook planilhaResultado;

        try{

            planilhaTemplate = Workbook.getWorkbook(inputTemplate);
            planilhaResultado = Workbook.createWorkbook(outputTemplate, planilhaTemplate);

            aplicaConteudo(planilhaResultado);

            planilhaResultado.write();
            planilhaResultado.close();

        }
        catch(BiffException e){
            e.printStackTrace();
        }

Segue o código do método responsável por produzir o conteúdo a ser escrito, comecei simples, inserindo novas linhas na planilha:

        private void aplicaConteudo(WritableWorkbook w) throws WriteException {

        WritableSheet excelSheet = w.getSheet("INSS");
        excelSheet.insertRow(11);

    }

Para testar:

        public static void main(String[] args) throws RowsExceededException, WriteException, IOException {

        String inputFile = "<<HOME_FOLDER>>/entrada/PlanilhaTemplate.xls";
        String outputFile = "<HOME_FOLDER<>>/saida/PlanilhaTemplate2.xls";

        GenerateExcelLogic novaPlanilhaTeste = new GenerateExcelLogic();
            novaPlanilhaTeste.gerarPlanilhaPreenchida(inputFile, outputFile);
    }

Esse é o log de erro ao executar o main:

Warning:  cannot insert row within formula:  Unrecognized token 61
Warning:  cannot insert row within formula:  Unrecognized token 60
Warning:  cannot insert row within formula:  Unrecognized token 60
Warning:  cannot insert row within formula:  Unrecognized token 60
Warning:  cannot insert row within formula:  Unrecognized token 60
Warning:  cannot insert row within formula:  Unrecognized token 60
Warning:  cannot insert row within formula:  Unrecognized token 60
Exception in thread "main" java.lang.NullPointerException
    at jxl.biff.formula.TokenFormulaParser.getBytes(TokenFormulaParser.java:495)
    at jxl.biff.formula.FormulaParser.getBytes(FormulaParser.java:183)
    at jxl.write.biff.ReadFormulaRecord.getData(ReadFormulaRecord.java:145)
    at jxl.biff.WritableRecordData.getBytes(WritableRecordData.java:71)
    at jxl.write.biff.File.write(File.java:147)
    at jxl.write.biff.RowRecord.writeCells(RowRecord.java:342)
    at jxl.write.biff.SheetWriter.write(SheetWriter.java:480)
    at jxl.write.biff.WritableSheetImpl.write(WritableSheetImpl.java:1558)
    at jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:950)
    at br.com.madi.projeto.GenerateExcelLogic.gerarPlanilhaInss(GenerateExcelLogic.java:45)
    at br.com.madi.projeto.GenerateExcelLogic.main(GenerateExcelLogic.java:68)

OBS: Minha planilha excel funciona como um template, precisa apenas inserir os dados. No caso, quando no insertRow() peço para ele inserir uma linha dentro do meu template, recebo o acima, agora quando a linha esta fora do template, não recebo o erro, porém não consigo ter certeza se a planilha foi alterada.

Infelizmente não achei muito detalhes desse erro na internet, estou analisando os fontes da API, abro esta duvida para contar com a experiência de alguém já passou por esse problema. Aceito também sugestões de APIs java para leitura e escrita em planilha excel.

API Utilziada: JExcel 2.6.12

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java excel ou faça a sua própria pergunta.