Array
(
)

Problemas ao exporta grande volume de dados para o excel!

Gust_infomaster
   - 14 jan 2008

Fiz um sistema q gera uma planilha dinâmica para meu usuário afim de que ele mesmo monte seu próprio relatório.
Acontece que o volume de dados cresce muito de um dia para o outro e em menos de dois meses de uso já tenho mais de 12 mil registros.
Quando meu usuário esta exportando selecionando todas as colunas permitidas, esta dando o seguinte erro dentro do Excel: “O arquivo não foi completamente carregado.”.
Ps.: o erro só ocorre quando são muitos os registros.

Estou usando o método simples de exportação:
Response.ContentType = ´application/vnd.ms-excel´

Preciso continuar usando este método, pois para usar o que cria um objeto do Excel faria ser necessário que todos meus usuários tenham em suas máquinas um client do Oracle (banco de dados em questão), já passaria a rodar local.

Bem desenvolvo em uma maquina com Windows XP, com IIS versão 5.1, nela habilitando o seguinte comando resolve: “Response.Buffer = true”.

Porem este comando não funciona muito bem no Windows Server 2003 com IIS 6.

Já verifiquei a configuração da máquina e lá a opção Buffer esta ativada e não esta aceitando grandes volumes na exportação ainda.

Ágüem tem alguma sugestão que não envolva CreateObject.

Gust_infomaster
   - 16 jan 2008

Obrigado ao pessoal que se dispôs a pelo menos pensar no meu problema, mas já resolvi e como postei numa pancada de fóruns vou compartilhar a solução aqui:

Bem era bobeira o erro, quando você solicita grande massa de dados o período de execução do seu script logicamente fica mais demorado dando SCRIPT TIMEOUT bem não identifiquei o problema antes embora o tenha imaginado porque para mim quando dava TIMEOUT gerava uma exceção que eu poderia capturar no Err, porem não gera. =\

A solução foi muito simples bastou colocar:

Response.Buffer = True
Server.ScriptTimeout = 999999

O Buffer veio mais como complemento para garantir que vai funcionar legal, porem só com o Server.ScriptTimeout já da certo.

O EXGERO no TIMEOUT é só para evitar ter de mexer de novo neste código já que por dia minha tabela acresce cerca de 600 registros.

Recomendo também o pessoal que for fazer exportação para o Excel a combinar o já conhecido ´Response.ContentType = ´application/vnd.ms-excel´ com:

Call Response.AddHeader(´content-disposition´, attachment;filename=Nome_do_Arquivo.xls´)

Ele força o DOWNLOAD na forma de Arquivo do Excel, vantagens:
» não sobrecarrega o BROWSER do cliente que possivelmente estará com outras paginas importantes abertas, não correndo o risco de gera um erro de aplicação fechando tudo.

» fica mais atraente e habilita todos os recursos do Excel, melhorando a usabilidade da sua planilha.

vlwwwwwww galera!! :D