Tenho que gerar um .xls com dados vindos de um banco SQL Server. Até aí tudo bem, fiz a conexão com o banco ok, e tô usando a POI pra poder gerar os .xls.
Só que o problema ocorre no loop que faço para inserir os dados na planilha.
Ex:
while (rs.next()) {
row = sheet1.createRow(cont);
row.createCell(0).setCellValue(rs.getString(1));
row.createCell(1).setCellValue(rs.getString(2));
row.createCell(2).setCellValue(rs.getString(3));
//são uns 40 row.createCell...
cont++;
}
Como são mais de 65000 registros no meu banco, conforme eu vou criando as celulas, chega um ponto que dá estouro de memória.
Já tentei aumentar a memória na JVM e ainda sim o problema persiste. Gostaria de saber se alguém já teve que fazer isso antes, e, se sim, como solucionou.
Cara será que não é porq ele está gerando tudo isso em memória?
Não daria para vc salvar o arquivo, e abrir novamente e continuar escrevendo neste arquivo? Fazendo isso, acredito eu, que os dados que fossem escritos, liberariam da memória, ficando na memória somente os dados novos que está inserindo.
Entao estava vendo aqui http://office.microsoft.com/pt-br/excel-help/especificacoes-e-limites-do-excel-HP005199291.aspx
o limite de uma planilha é 65.536 linhas por 256 colunas bem proximo do seu valor mas ainda nao o excede,uma solucao seria voce carregar (paginar) a consulta como por exemplo,trazer os registros 1 até o 5000 depois do 5000 até o 10000 e assim sucessivamente. Porem eu acho estranho esse comportamento, já que eu frequentemente extraio informacoes de 80 schemas diferentes no postgresql e transfiro para uma planilha geralmente quem ‘arrega’ é o servidor de banco.
Eu também já sabia sobre esse limite de linhas do Excel.
O pulo do gato é justamente na hora do empilhamento de células, que esta comendo a memória.
Evandro_Contato
Eu pensei nessa hipótese de ir salvando os dados no arquivo a cada 20 mil linhas, por exemplo. Assim, quando dou o comando “write()”, ele escreve os dados na planilha e libera memória. Só que depois que faço isso, eu não consigo abrir o planilha novamente para continuar a adicionar registros. Vc tem algum exemplo de como fazer isso? Pode ser tanto pelo POI ou JExcel.
Eu também já sabia sobre esse limite de linhas do Excel.
O pulo do gato é justamente na hora do empilhamento de células, que esta comendo a memória.
Evandro_Contato
Eu pensei nessa hipótese de ir salvando os dados no arquivo a cada 20 mil linhas, por exemplo. Assim, quando dou o comando “write()”, ele escreve os dados na planilha e libera memória. Só que depois que faço isso, eu não consigo abrir o planilha novamente para continuar a adicionar registros. Vc tem algum exemplo de como fazer isso? Pode ser tanto pelo POI ou JExcel.
Valeu![/quote]
O limite do excel 2010 é bem maior, mas não é compatível com o formato antigo
Já pensou em criar uma nova Sheet (Planilha) a cada 10.000 registros?
Espero ter ajudado[/quote]
Oi Elisangela,
Também já tentei fazer dessa forma, porém não dá certo porque mesmo criando uma nova Sheet o empilhamento de células continua.
Só é liberado espaço na memória quando dou “write()”, que é quando as células que estão na memória vão ser escritas no arquivo.
Resumindo: meu problema está na montagem lógica da planilha por causa do excesso de dados, pois com menos dados funciona perfeitamente.