Sql x Dbgrid X MS Excel

25/02/2003

0

:arrow: Sou novo aqui no Clube Delphi mas já trabalho a algum tempinho com o Delphi.

:?: Minha dúvida parece simples mas já venho quebrando a cabeça a algum tempo: eu gerei uma consulta sql e mostrei ela em um dbgrid porém não sei como faço para exportar a consulta para o Excel, não precisa de formatação nem nada, apenas basta que os dados vão para o Excel.

Obrigado a todos que puderem ajudar.


Reifas

Reifas

Responder

Posts

26/02/2003

Web_junior

Ola amigo!!!
Fiz uma função em um dos meus sistemas que faz essa exportação
Será necessário vc utilizar a uses ComObj.
De uma olhadinha nela, e adapta para sua necessidade

Um abraço

procedure ParaExcel(DataSet1: TDataSet; Campos: TStrings; NomPlan: String; NovaPasta: Boolean);
var
i, x, j: integer;
XLApp: variant;
Workbook: variant;
WorkSheet: variant;
ContPlan: integer;
begin
{Se a planilha não tiver um nome, será criado um padrão}
if (NomPlan = ´´) then
NomPlan := ´Plan´;

if VarIsEmpty(XLApp) then
{cria um acesso ao Excel, ou uma nova aplicação Excel}
XLApp:= CreateOleObject(´Excel.Application´);

{não há nenhuma pasta ou deseja criar uma nova }
if (XLApp.Workbooks.Count = 0) or NovaPasta then
begin
{cria uma nova pasta com uma planilha}
WorkBook := XLApp.Workbooks.Add(xlWBatWorkSheet);
{definicao da planilha}
WorkSheet := Workbook.WorkSheets[1];
end
else
WorkSheet :=
Workbook.Worksheets.Add(,Workbook.WorkSheets[Workbook.WorkSheets.Count],
1,xlWorkSheet);
Inc(ContPlan);
WorkSheet.Name := NomPlan + IntToStr(ContPlan);
{torna o Excel visivel}
XLApp.Visible := True;
{insere um cabecalho na planilha}
for x := 0 to Campos.Count - 1 do
begin
j := Integer(Campos.Objects[x]);
WorkSheet.Cells[1, x + 1].Font.Bold := True; {coloca o cabecalho em negrito}
WorkSheet.Cells[1, x + 1] := DataSet1.Fields[j].DisplayName;
if Length(DataSet1.Fields[j].DisplayName) < DataSet1.Fields[j].DisplayWidth then
WorkSheet.Columns[x + 1].ColumnWidth := DataSet1.Fields[j].DisplayWidth
else
WorkSheet.Columns[x + 1].ColumnWidth := Length(DataSet1.Fields[j].DisplayName);
end;
i := 1;
DataSet1.First;
{insere dados da tabela para a planilha}
while not DataSet1.Eof do
begin
Inc(i);
for x := 0 to Campos.Count - 1 do
begin
j := integer(Campos.Objects[x]);
WorkSheet.Cells[i, x + 1] := DataSet1.Fields[j].AsString;
end;
DataSet1.Next;
end;
end;


Responder

05/03/2003

Reifas

Ola amigo!!! Fiz uma função em um dos meus sistemas que faz essa exportação Será necessário vc utilizar a uses ComObj. De uma olhadinha nela, e adapta para sua necessidade Um abraço procedure ParaExcel(DataSet1: TDataSet; Campos: TStrings; NomPlan: String; NovaPasta: Boolean); var i, x, j: integer; XLApp: variant; Workbook: variant; WorkSheet: variant; ContPlan: integer; begin {Se a planilha não tiver um nome, será criado um padrão} if (NomPlan = ´´) then NomPlan := ´Plan´; if VarIsEmpty(XLApp) then {cria um acesso ao Excel, ou uma nova aplicação Excel} XLApp:= CreateOleObject(´Excel.Application´); {não há nenhuma pasta ou deseja criar uma nova } if (XLApp.Workbooks.Count = 0) or NovaPasta then begin {cria uma nova pasta com uma planilha} WorkBook := XLApp.Workbooks.Add(xlWBatWorkSheet); {definicao da planilha} WorkSheet := Workbook.WorkSheets[1]; end else WorkSheet := Workbook.Worksheets.Add(,Workbook.WorkSheets[Workbook.WorkSheets.Count], 1,xlWorkSheet); Inc(ContPlan); WorkSheet.Name := NomPlan + IntToStr(ContPlan); {torna o Excel visivel} XLApp.Visible := True; {insere um cabecalho na planilha} for x := 0 to Campos.Count - 1 do begin j := Integer(Campos.Objects[x]); WorkSheet.Cells[1, x + 1].Font.Bold := True; {coloca o cabecalho em negrito} WorkSheet.Cells[1, x + 1] := DataSet1.Fields[j].DisplayName; if Length(DataSet1.Fields[j].DisplayName) < DataSet1.Fields[j].DisplayWidth then WorkSheet.Columns[x + 1].ColumnWidth := DataSet1.Fields[j].DisplayWidth else WorkSheet.Columns[x + 1].ColumnWidth := Length(DataSet1.Fields[j].DisplayName); end; i := 1; DataSet1.First; {insere dados da tabela para a planilha} while not DataSet1.Eof do begin Inc(i); for x := 0 to Campos.Count - 1 do begin j := integer(Campos.Objects[x]); WorkSheet.Cells[i, x + 1] := DataSet1.Fields[j].AsString; end; DataSet1.Next; end; end;


Cara,

Muito obrigado pela ajuda está sendo muito útil. Mas ainda me restou uma dúvida:

Criei a tal procedure exatamente com o nome que você colocou acima porém como faço para chamar a procedure num botão?

Fico no aguardo e muito obrigado.

Atenciosamente,


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar