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.
:?: 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
Curtir tópico
+ 0
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;
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
Clique aqui para fazer login e interagir na Comunidade :)