Jakarta POI está demorando muito para ler XLSX

0 respostas
A

Pessoal,

Estou lendo uma planilha Excel XLSX com o POI (XSSF) e gravando um arquivo sequencial.

O problema é o tempo de execução…

Estou lendo uma planilha com 80.000 (oitenta mil) linhas e gravando um arquivo TXT com as 7 colunas da planilha.

Tudo bem, sei que a planilha é grande, mas está demorando mais de 1 hora e meia. O pior é que não termina, acaba com o erro abaixo:
type Status report
message HTTP method GET is not supported by this URL
description The specified HTTP method is not allowed for the requested resource.

Já testei o servlet com uma planilha pequena e funcionou perfeitamente.

A API Jakarta POI tem problema de performance?

Alguém pode me dar uma ajuda?

O código do servlet é este:

DESCULPEM, NÃO SEI USER O EDITOR DO FÓRUM

import <a href="http://java.io">java.io</a>.<em>;

import java.util.</em>;

import javax.servlet.<em>;

import javax.servlet.http.</em>;

import java.sql.<em>;

import javax.sql.</em>;

import java.lang.<em>;

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

import org.apache.poi.hssf.usermodel.HSSFCell;

import org.apache.poi.hssf.usermodel.HSSFRow;

import org.apache.poi.hssf.usermodel.HSSFSheet;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.CreationHelper;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.xssf.usermodel.XSSFCell;

import org.apache.poi.xssf.usermodel.XSSFRow;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import controleCtrlFin.</em>;

public class BZTE00110 extends HttpServlet
{

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    doPost(request, response);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{

    Diretorio diretorio = new Diretorio();
    String dirServlet = diretorio.DiretorioServletServlet();
    String dirJsp     = diretorio.DiretorioServletJsp();
    String dirUpload  = diretorio.DiretorioUpload();
    String dirBZTE    = diretorio.DiretorioBZTE();

    HttpSession sessao = request.getSession(true);
    String sessaoID = (String)sessao.getId();

    String controle = (String)request.getAttribute("controle");if (controle == null) controle = "";

    try
    {

            if (controle.equals(""))
            {
                    request.setAttribute("tabAA",tabAA);
                    request.getRequestDispatcher(dirJsp + "BZTE00110.jsp").forward(request, response);
                    return;
            }
            else if (controle.equals("CAPTURAR"))
            {

                    String  caminhoArquivo      = (String)request.getAttribute("caminhoArquivo");

                    SimpleDateFormat DataHoraFormat = new SimpleDateFormat("yyyyMMddhhmmss");
                    String DataHora = DataHoraFormat.format(new java.util.Date());
                    String nomeBackup = "Backup_Dados_Modulos_" + DataHora + ".sql";

                    File dirBackup = new File(dirUpload + nomeBackup);
                    FileWriter arquivoSaida = new FileWriter(dirBackup);
                    PrintWriter saida = new PrintWriter(arquivoSaida);

                    int ind1 = 0;

                    String celula    [] = new String [8];
                    String depto     = "";
                    String modulo    = "";
                    String linguagem = "";
                    String tipo      = "";
                    String descricao = "";

                    FileInputStream arquivo = new FileInputStream(caminhoArquivo);
                    XSSFWorkbook  planilha = new XSSFWorkbook(arquivo);

                    XSSFSheet sheet = planilha.getSheetAt(0);

                    Iterator contaLinhas = sheet.rowIterator();


                    while (contaLinhas.hasNext())
                    {
                            XSSFRow linha=(XSSFRow) contaLinhas.next();

                            celula [1] = String.valueOf(linha.getCell(0));
                            celula [2] = String.valueOf(linha.getCell(1));
                            celula [3] = String.valueOf(linha.getCell(2));
                            celula [4] = String.valueOf(linha.getCell(3));
                            celula [5] = String.valueOf(linha.getCell(4));
                            celula [6] = String.valueOf(linha.getCell(5));
                            celula [7] = String.valueOf(linha.getCell(6));

                            depto     = celula [1];
                            modulo    = celula [2];

                            if (celula[4].equals("AS"))
                            {
                                   linguagem = "ASSEMBLER";
                            }
                            else
                            {
                                   linguagem = "?????????????";
                            }

                            descricao = celula [5];

                            if (celula[7].equals("XREFON"))
                            {
                                 tipo      = "ONLINE";
                            }
                            else
                            {
                                  tipo      = "?????????????";
                            }

                            linhaSaida = "('" + modulo + "','" + linguagem + "','" + tipo + "','" + descricao + "','" + depto + "')";
                            saida.println(linhaSaida);					
                    }
            }


           saida.close();
           arquivoSaida.close();

           request.getRequestDispatcher(dirJsp + "BZTE00110.jsp").forward(request, response);
           return;
    }

 }
Criado 18 de maio de 2013
Respostas 0
Participantes 1