O Método Add da classe Workbooks falhou
Olá pessoal,
Estou tentando exportar a minha tabela já pronta para o pdf porém ele está acontecendo o seguinte erro quando eu clico no botão para exportar O Método "Add" da classe "Workbooks falhou". A tabela já está funcionando listando todos os campos. O código que eu desenvolvi para o excel está abaixo caso ajude. Desde já muito Agradecido!
Estou tentando exportar a minha tabela já pronta para o pdf porém ele está acontecendo o seguinte erro quando eu clico no botão para exportar O Método "Add" da classe "Workbooks falhou". A tabela já está funcionando listando todos os campos. O código que eu desenvolvi para o excel está abaixo caso ajude. Desde já muito Agradecido!
procedure TF_Modelo.ExportaDBGrid(ParaExcel: Boolean);
var
bm : TBookMark;
col, lin: Integer;
sLinha: String;
Memo: TMemo;
ExcelApp: Variant;
begin
Screen.Cursor := crHourGlass;
DBGrid1.DataSource.DataSet.DisableControls;
bm := DBGrid1.DataSource.DataSet.GetBookmark;
DBGrid1.DataSource.DataSet.First;
//Criar o objeto Excel
if ParaExcel then
begin
ExcelApp := CreateOleObject(''Excel.application'');
ExcelApp.WorkBooks.add(xlWBatWorkSheet);
ExcelApp.WorkBooks[1].WorkSheet[1].name:= ''Minha Planilha'';
end;
//Enviar primeiramente para o memo
Memo := TMemo.Create(nil);
memo.Visible:= false;
memo.Parent := F_Modelo;
memo.Clear;
sLinha:= '' '';
//Pega o nome da Coluna
for col := 0 to DBGrid1.FieldCount -1 do
sLinha:= sLinha + DBGrid1.Fields[col].DisplayLabel + #9;
memo.Lines.Add(sLinha);
//Pega as Linhas
for lin := 0 to DBGrid1.DataSource.DataSet.RecordCount -1 do
begin
sLinha:= '' '';
for col := 0 to DBGrid1.FieldCount -1 do
sLinha:= sLinha + DBGrid1.Fields[col].AsString + #9;
memo.Lines.Add(sLinha);
DBGrid1.DataSource.DataSet.Next;
end;
//Selecionar o memo e copio para Área de Trababalho
memo.SelectAll;
memo.CopyToClipboard;
if ParaExcel then
begin
ExcelApp.WordBooks[1].WorkSheets[''Minha Planilha''].paste;
ExcelApp.visible:= true;
end;
FreeAndNil(memo);
DBGrid1.DataSource.DataSet.GotoBookmark(bm);
DBGrid1.DataSource.DataSet.FreeBookmark(bm);
DBGrid1.DataSource.DataSet.EnableControls;
Screen.Cursor:= crDefault;
end;Edson Vilhalba
Curtidas 0
Respostas
Edson Vilhalba
15/01/2014
Pessoal me desculpem é para o EXCEL sem querer coloquei pdf
GOSTEI 0
Eduardo Flaeschen
15/01/2014
Olá Edson, você conseguiu resolver esse problema ? estou com o mesmo erro !
GOSTEI 0
Dqr Ti
15/01/2014
Prezado.
Experimente fazer as seguintes alterações.
no trecho tirado do seu código abaixo:
//Criar o objeto Excel
if ParaExcel then
begin
ExcelApp := CreateOleObject(''Excel.application'');
ExcelApp.WorkBooks.add(xlWBatWorkSheet);
ExcelApp.WorkBooks[1].WorkSheet[1].name:= ''Minha Planilha'';
end;
//Enviar primeiramente para o memo
Solução:
Na Linha: ExcelApp := CreateOleObject(''Excel.application'');
Mude Para: ExcelApp := CreateOleObject('Excel.application');
Detalhe: Use aspas simples.
Na Linha: ExcelApp.WorkBooks.add(xlWBatWorkSheet);
Mude Para: ExcelApp.WorkBooks.add;
Detalhe: retire (xlWBatWorkSheet)
Na Linha: ExcelApp.WorkBooks[1].WorkSheet[1].name:= ''Minha Planilha'';
Mude Para: ExcelApp.WorkBooks[1].WorkSheets[1].name:= 'Minha Planilha';
Detalhe: acrescente a letra "s" WorkSheets[1] e coloque aspas simples ''Minha Planilha'' = ERRADO - 'Minha Planilha' = CORRETO.
Trecho corrigido:
//Criar o objeto Excel
if ParaExcel then
begin
ExcelApp := CreateOleObject('Excel.application');
ExcelApp.WorkBooks.add;
ExcelApp.WorkBooks[1].WorkSheets[1].name:= 'Minha Planilha';
end;
//Enviar primeiramente para o memo
Observação:
Quando rodar a aplicação, certifique-se que em seu DBGrid esteja mostrando seus registros, se estiver vazio, vai gerar erro.
Espero ter ajudado.
Boa sorte!
Experimente fazer as seguintes alterações.
no trecho tirado do seu código abaixo:
//Criar o objeto Excel
if ParaExcel then
begin
ExcelApp := CreateOleObject(''Excel.application'');
ExcelApp.WorkBooks.add(xlWBatWorkSheet);
ExcelApp.WorkBooks[1].WorkSheet[1].name:= ''Minha Planilha'';
end;
//Enviar primeiramente para o memo
Solução:
Na Linha: ExcelApp := CreateOleObject(''Excel.application'');
Mude Para: ExcelApp := CreateOleObject('Excel.application');
Detalhe: Use aspas simples.
Na Linha: ExcelApp.WorkBooks.add(xlWBatWorkSheet);
Mude Para: ExcelApp.WorkBooks.add;
Detalhe: retire (xlWBatWorkSheet)
Na Linha: ExcelApp.WorkBooks[1].WorkSheet[1].name:= ''Minha Planilha'';
Mude Para: ExcelApp.WorkBooks[1].WorkSheets[1].name:= 'Minha Planilha';
Detalhe: acrescente a letra "s" WorkSheets[1] e coloque aspas simples ''Minha Planilha'' = ERRADO - 'Minha Planilha' = CORRETO.
Trecho corrigido:
//Criar o objeto Excel
if ParaExcel then
begin
ExcelApp := CreateOleObject('Excel.application');
ExcelApp.WorkBooks.add;
ExcelApp.WorkBooks[1].WorkSheets[1].name:= 'Minha Planilha';
end;
//Enviar primeiramente para o memo
Observação:
Quando rodar a aplicação, certifique-se que em seu DBGrid esteja mostrando seus registros, se estiver vazio, vai gerar erro.
Espero ter ajudado.
Boa sorte!
GOSTEI 0
Dqr Ti
15/01/2014
Prezado.
Experimente fazer as seguintes alterações.
no trecho tirado do seu código abaixo:
//Criar o objeto Excel
if ParaExcel then
begin
ExcelApp := CreateOleObject(''Excel.application'');
ExcelApp.WorkBooks.add(xlWBatWorkSheet);
ExcelApp.WorkBooks[1].WorkSheet[1].name:= ''Minha Planilha'';
end;
//Enviar primeiramente para o memo
Solução:
Na Linha: ExcelApp := CreateOleObject(''Excel.application'');
Mude Para: ExcelApp := CreateOleObject('Excel.application');
Detalhe: Use aspas simples.
Na Linha: ExcelApp.WorkBooks.add(xlWBatWorkSheet);
Mude Para: ExcelApp.WorkBooks.add;
Detalhe: retire (xlWBatWorkSheet)
Na Linha: ExcelApp.WorkBooks[1].WorkSheet[1].name:= ''Minha Planilha'';
Mude Para: ExcelApp.WorkBooks[1].WorkSheets[1].name:= 'Minha Planilha';
Detalhe: acrescente a letra "s" WorkSheets[1] e coloque aspas simples ''Minha Planilha'' = ERRADO - 'Minha Planilha' = CORRETO.
Trecho corrigido:
//Criar o objeto Excel
if ParaExcel then
begin
ExcelApp := CreateOleObject('Excel.application');
ExcelApp.WorkBooks.add;
ExcelApp.WorkBooks[1].WorkSheets[1].name:= 'Minha Planilha';
end;
//Enviar primeiramente para o memo
Observação:
Quando rodar a aplicação, certifique-se que em seu DBGrid esteja mostrando seus registros, se estiver vazio, vai gerar erro.
Não sei porque, mas quando posto a resposta, automaticamente coloca aspas a mais. Em todos os lugares que tem aspas, favor colocar aspas simples.
Espero ter ajudado.
Boa sorte!
Experimente fazer as seguintes alterações.
no trecho tirado do seu código abaixo:
//Criar o objeto Excel
if ParaExcel then
begin
ExcelApp := CreateOleObject(''Excel.application'');
ExcelApp.WorkBooks.add(xlWBatWorkSheet);
ExcelApp.WorkBooks[1].WorkSheet[1].name:= ''Minha Planilha'';
end;
//Enviar primeiramente para o memo
Solução:
Na Linha: ExcelApp := CreateOleObject(''Excel.application'');
Mude Para: ExcelApp := CreateOleObject('Excel.application');
Detalhe: Use aspas simples.
Na Linha: ExcelApp.WorkBooks.add(xlWBatWorkSheet);
Mude Para: ExcelApp.WorkBooks.add;
Detalhe: retire (xlWBatWorkSheet)
Na Linha: ExcelApp.WorkBooks[1].WorkSheet[1].name:= ''Minha Planilha'';
Mude Para: ExcelApp.WorkBooks[1].WorkSheets[1].name:= 'Minha Planilha';
Detalhe: acrescente a letra "s" WorkSheets[1] e coloque aspas simples ''Minha Planilha'' = ERRADO - 'Minha Planilha' = CORRETO.
Trecho corrigido:
//Criar o objeto Excel
if ParaExcel then
begin
ExcelApp := CreateOleObject('Excel.application');
ExcelApp.WorkBooks.add;
ExcelApp.WorkBooks[1].WorkSheets[1].name:= 'Minha Planilha';
end;
//Enviar primeiramente para o memo
Observação:
Quando rodar a aplicação, certifique-se que em seu DBGrid esteja mostrando seus registros, se estiver vazio, vai gerar erro.
Não sei porque, mas quando posto a resposta, automaticamente coloca aspas a mais. Em todos os lugares que tem aspas, favor colocar aspas simples.
Espero ter ajudado.
Boa sorte!
GOSTEI 0
Edvaldo Melo
15/01/2014
Para: dQR
Sim, ajudou bastante, mas ainda consta um erro após a execução de chamada da planilha.
diz o seguinte:
Access violation at address 00408662 in modulo 'Estoque.exe'
Read of address 00000009
Se puder ajudar mais uma vez agradeço
Sim, ajudou bastante, mas ainda consta um erro após a execução de chamada da planilha.
diz o seguinte:
Access violation at address 00408662 in modulo 'Estoque.exe'
Read of address 00000009
Se puder ajudar mais uma vez agradeço
GOSTEI 0