Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Motta

Delphi x Excel erro quando a planilha é grande

Recommended Posts

Sr(a)s :

 

Tenho aqui uma aplicação escrita por um 3º.

 

Esta aplicação lê um ClientDataSet e grava uma planilha Excel baseada num modelo.

 

Funciona bem para a maioria dos casos, porém para alguns casos (que eu creio ser o volume dos dados)

a planilha gera uma exceção de Access Violation (?!)

 

1) Alguem já passou por isto ?

2) A minha desconfiança do volume de dados procede (funcina quando o volume é pequeno) ?

3) Pode ser alguma outra coisa ?

4) Não achei a documentação das propriedades deste Objeto do Excel, onde acho isto ?

5) Existe alguma propriedade/método que aumente o memória/capacidade da planilha ?

6) A "bagaça" pode estar no Excel ?

 

 

Observação :

 

1) O Objeto é criado assim :

MSExcel := CreateOleObject('Excel.Application');

 

2) versões

Delphi 2009
Excel 2007 
Modelo salvo como .xlsx

 

Desde já grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo!

 

Eu tive um problema semelhante, no entanto ocorria o "AV" quando eu executava em um primeiro momento para gerar minha planilha e em seguida o fize-se novamente. No meu caso, o problema era devido não estar destruindo o objeto responsável pela manipulação do excel. Depois que o fiz o problema do "AV" não aconteceu mais.

 

Até a próxima. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta aplicação não destroe o Objeto pois permite a visualização do mesmo com o programa aberto, cheguei a alterar a app para destruir o objeto mas a planilha ficava zerada.

A solução seria não permitir a visualização ou tenho como destruir o objeto com a planilha aberta ?

 

Segue parte relavante do código em questão.

 

procedure TfrmPrinc.btnPlanilhaClick(Sender: TObject);
begin
 ...
 Application.ProcessMessages;
 screen.Cursor := crHourGlass;
 try
   MSExcel := CreateOleObject('Excel.Application');
   MSExcel.Application.DisplayAlerts := False;
   try
     ExcelBook := MSExcel.WorkBooks.Open(sdPlanilha.FileName);
     ...

     MSExcel.Application.DisplayAlerts := False;
     MSExcel.Visible := True;
   except
     On E : Exception do
     begin
       MessageDlg('Erro gerando planilha: ' + #13#10 + E.Message, mtError, [mbok],0);
       MSExcel.Application.Quit;
       MSExcel := null;
     end;
   end;
 finally
   pnlAguarde.Visible := False;
   Screen.Cursor := crDefault;
 end;
end;

 

De qualquer forma grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na realidade o problema era que um campo do BD estava em branco e um erro no tratamento deste fazia com o planilha se "perdesse".
O mais puro peopleoware.

 

Resolvido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.