在delphi中如何将查询结果导出到excel中

在delphi中如何将查询结果导出到excel中最好有源码啊!strSql:='select*fromtable';adoquery.close;adoquery.SQL... 在delphi中如何将查询结果导出到excel中

最好有源码啊!
strSql := 'select * from table';
adoquery.close;
adoquery.SQL.Clear;
adoquery.SQL.Add(strSql);
showmessage(strSql);

adoquery.Open;

这样的查询
展开
 我来答
midasblesshj
2009-04-08 · TA获得超过127个赞
知道小有建树答主
回答量:177
采纳率:0%
帮助的人:180万
展开全部
unit U_func;

interface
uses forms,SysUtils,ComCtrls,DBGrids,DB,Dialogs,Messages,Windows,ComObj,Controls,ADODB,StdCtrls,Graphics;

function ProgressBarform(max:integer):tProgressBar;
function ExportToExcel(dbgrid:tdbgrid):boolean;
function queryExportToExcel(queryexport:tadoquery):boolean;

implementation

//生成一个显示进度条的窗体
function ProgressBarform(max:integer):tProgressBar;
var
ProgressBar1:TProgressBar;
form:tform;
begin
application.CreateForm(tform,form);
form.Position:=poScreenCenter;
form.BorderStyle:=bsnone;
form.Height:=30;
form.Width:=260;
ProgressBar1:=TProgressBar.Create(form);
ProgressBar1.Visible:=true;
ProgressBar1.Smooth:=true;
ProgressBar1.Max:=max;
ProgressBar1.ParentWindow:=form.Handle;
ProgressBar1.Height:=20;
ProgressBar1.Width:=250;
ProgressBar1.Left:=form.Left+5;
ProgressBar1.Top:=form.Top+5;
ProgressBar1.Step:=1;
form.show;
result:=ProgressBar1;
end;

//将DBGRID中的内容导入到EXCEL中
function ExportToExcel(dbgrid:tdbgrid):boolean;
const
xlNormal=-4143;
var
i,j,k:integer;
str,filename:string;
excel:OleVariant;
SavePlace: TBookmark;
savedialog:tsavedialog;
ProgressBar1:TProgressBar;
begin
result:=false;
filename:='';
if dbgrid.DataSource.DataSet.RecordCount>65536 then
begin
if application.messagebox('需要导出的数据过大,Excel最大只能容纳65536行,是否还要继续?','询问',mb_yesno+mb_iconquestion)=idno then
exit;
end;
screen.Cursor:=crHourGlass;
try
excel:=CreateOleObject('Excel.Application');
excel.workbooks.add;
except
screen.cursor:=crDefault;
showmessage('无法调用Excel!');
exit;
end;
savedialog:=tsavedialog.Create(nil);
savedialog.Filter:='Excel文件(*.xls)|*.xls';
if savedialog.Execute then
begin
if FileExists(savedialog.FileName) then
try
if application.messagebox('该文件已经存在,要覆盖吗?','询问',mb_yesno+mb_iconquestion)=idyes then
DeleteFile(PChar(savedialog.FileName))
else
begin
Excel.Quit;
savedialog.free;
screen.cursor:=crDefault;
Exit;
end;
except
Excel.Quit;
savedialog.free;
screen.cursor:=crDefault;
Exit;
end;
filename:=savedialog.FileName;
end;
savedialog.free;
application.ProcessMessages;
if filename='' then
begin
result:=false;
Excel.Quit;
screen.cursor:=crDefault;
exit;
end;
k:=0;
for i:=0 to dbgrid.Columns.count-1 do
begin
if dbgrid.Columns.Items[i].Visible then
begin
//Excel.Columns[k+1].ColumnWidth:=dbgrid.Columns.Items[i].Title.Column.Width;
excel.cells[1,k+1]:=dbgrid.Columns.Items[i].Title.Caption;
inc(k);
end;
end;

dbgrid.DataSource.DataSet.DisableControls;
saveplace:=dbgrid.DataSource.DataSet.GetBookmark;
dbgrid.DataSource.dataset.First;
i:=2;
if dbgrid.DataSource.DataSet.recordcount>65536 then
ProgressBar1:=ProgressBarform(65536)
else
ProgressBar1:=ProgressBarform(dbgrid.DataSource.DataSet.recordcount);
while not dbgrid.DataSource.dataset.Eof do
begin
k:=0;
for j:=0 to dbgrid.Columns.count-1 do
begin
if dbgrid.Columns.Items[j].Visible then
begin
excel.cells[i,k+1].NumberFormat:='@';
if not dbgrid.DataSource.dataset.fieldbyname(dbgrid.Columns.Items[j].FieldName).isnull then
begin
str := dbgrid.DataSource.dataset.fieldbyname(dbgrid.Columns.Items[j].FieldName).value;
Excel.Cells[i, k + 1] := Str;
end;
inc(k);
end
else
continue;
end;
if i=65536 then
break;
inc(i);
ProgressBar1.StepBy(1);
dbgrid.DataSource.dataset.next;
end;
progressbar1.Owner.Free;
application.ProcessMessages;
dbgrid.DataSource.dataset.GotoBookmark(SavePlace);
dbgrid.DataSource.dataset.EnableControls;

try
if copy(FileName,length(FileName)-3,4)<>'.xls' then
FileName:=FileName+'.xls';
Excel.ActiveWorkbook.SaveAs(FileName,xlNormal,'', '',False,False);
except
Excel.Quit;
screen.cursor:=crDefault;
exit;
end;
//Excel.Visible := true;
Excel.Quit;
screen.cursor:=crDefault;
Result:= true;
end;

//将ADOQUERY的数据集导入到EXCEL中
function queryExportToExcel(queryexport:tadoquery):boolean;
const
xlNormal=-4143;
var
i,j,k:integer;
str,filename:string;
excel:OleVariant;
savedialog:tsavedialog;
ProgressBar1:TProgressBar;
begin
result:=false;
filename:='';
if queryexport.RecordCount>65536 then
begin
if application.messagebox('需要导出的数据过大,Excel最大只能容纳65536行,是否还要继续?','询问',mb_yesno+mb_iconquestion)=idno then
exit;
end;
screen.Cursor:=crHourGlass;
try
excel:=CreateOleObject('Excel.Application');
excel.workbooks.add;
except
screen.cursor:=crDefault;
showmessage('无法调用Excel!');
exit;
end;
savedialog:=tsavedialog.Create(nil);
savedialog.Filter:='Excel文件(*.xls)|*.xls';
if savedialog.Execute then
begin
if FileExists(savedialog.FileName) then
try
if application.messagebox('该文件已经存在,要覆盖吗?','询问',mb_yesno+mb_iconquestion)=idyes then
DeleteFile(PChar(savedialog.FileName))
else
begin
Excel.Quit;
savedialog.free;
screen.cursor:=crDefault;
Exit;
end;
except
Excel.Quit;
savedialog.free;
screen.cursor:=crDefault;
Exit;
end;
filename:=savedialog.FileName;
end;
savedialog.free;
application.ProcessMessages;
if filename='' then
begin
result:=false;
Excel.Quit;
screen.cursor:=crDefault;
exit;
end;
k:=0;
for i:=0 to queryexport.FieldCount-1 do
begin
excel.cells[1,k+1]:=queryexport.Fields[i].FieldName;
inc(k);
end;
queryexport.First;
i:=2;
if queryexport.recordcount>65536 then
ProgressBar1:=ProgressBarform(65536)
else
ProgressBar1:=ProgressBarform(queryexport.recordcount);
while not queryexport.Eof do
begin
k:=0;
for j:=0 to queryexport.FieldCount-1 do
begin
excel.cells[i,k+1].NumberFormat:='@';
if not queryexport.fieldbyname(queryexport.Fields[j].FieldName).isnull then
begin
str:=queryexport.fieldbyname(queryexport.Fields[j].FieldName).AsString;
Excel.Cells[i, k + 1] := Str;
end;
inc(k);
end;
if i=65536 then
break;
inc(i);
ProgressBar1.StepBy(1);
queryexport.next;
end;
progressbar1.Owner.Free;
application.ProcessMessages;
try
if copy(FileName,length(FileName)-3,4)<>'.xls' then
FileName:=FileName+'.xls';
Excel.ActiveWorkbook.SaveAs(FileName,xlNormal,'', '',False,False);
except
Excel.Quit;
screen.cursor:=crDefault;
exit;
end;
//Excel.Visible := true;
Excel.Quit;
screen.cursor:=crDefault;
Result := true;
end;

end.
天地惶惶
2009-04-01 · TA获得超过3223个赞
知道大有可为答主
回答量:1215
采纳率:0%
帮助的人:810万
展开全部
procedure ExportExcel(FileName, Caption: string);
var
Eclapp, workbook: variant;
i, n, j: integer;
begin
if FileExists(FileName) then
if (CmmObj.AppMsg('文件已存在,替换吗?') = IDOK) then
DeleteFile(FileName)
else
Exit;
Eclapp:= createoleobject('Excel.Application');
Application.ProcessMessages;
try
Eclapp.workbooks.add;
eclapp.cells[1, 1]:= Caption;
n:= 2;
for i:= 3 to cell.GetRows(0) - 1 do//你记录条数
begin
for j:= 1 to cell.GetCols(0) - 1 do//你每个记录的字段数
begin
eclapp.cells[n, j]:= StringReplace(cell.GetCellString(j, i, 0), ',', '', [rfReplaceAll]);
Application.ProcessMessages;
end;
inc(n);
end;
eclapp.cells[n, 1]:= '总数为:'+ inttostr(cell.GetRows(0) - 1 - 3)+'条';
eclapp.Activeworkbook.saveas(FileName);
eclapp.visible:= true;
except
on E: Exception do
begin
raise Exception.Create(E.Message);
end;
end;
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wwj_jb224
2009-04-01 · TA获得超过196个赞
知道小有建树答主
回答量:131
采纳率:0%
帮助的人:139万
展开全部
好象有相关的控件,我不太清楚了

不过可以引用COMOBJ单元,在程序里打开一个EXCEL并把查询结果按行依次写到EXCEL的单元格里,然后保存退出。
var ExcelApp: Variant;
ExcelApp := CreateOleObject( 'Excel.Application' );

操作太多参考地址
http://hi.baidu.com/wwjwwj/blog/item/590d65d03c3cba8fa0ec9c0e.html
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
TheFiend
2009-04-01 · TA获得超过625个赞
知道大有可为答主
回答量:1346
采纳率:0%
帮助的人:1218万
展开全部
用2个 ado ,一个 连接到 excel 一个 连到 数据库 然后 一个查询 一个写入
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
普清硕孟阳
2019-10-31 · TA获得超过4584个赞
知道大有可为答主
回答量:3264
采纳率:27%
帮助的人:498万
展开全部
unit
U_func;
interface
uses
forms,SysUtils,ComCtrls,DBGrids,DB,Dialogs,Messages,Windows,ComObj,Controls,ADODB,StdCtrls,Graphics;
function
ProgressBarform(max:integer):tProgressBar;
function
ExportToExcel(dbgrid:tdbgrid):boolean;
function
queryExportToExcel(queryexport:tadoquery):boolean;
implementation
//生成一个显示进度条的窗体
function
ProgressBarform(max:integer):tProgressBar;
var
ProgressBar1:TProgressBar;
form:tform;
begin
application.CreateForm(tform,form);
form.Position:=poScreenCenter;
form.BorderStyle:=bsnone;
form.Height:=30;
form.Width:=260;
ProgressBar1:=TProgressBar.Create(form);
ProgressBar1.Visible:=true;
ProgressBar1.Smooth:=true;
ProgressBar1.Max:=max;
ProgressBar1.ParentWindow:=form.Handle;
ProgressBar1.Height:=20;
ProgressBar1.Width:=250;
ProgressBar1.Left:=form.Left+5;
ProgressBar1.Top:=form.Top+5;
ProgressBar1.Step:=1;
form.show;
result:=ProgressBar1;
end;
//将DBGRID中的内容导入到EXCEL中
function
ExportToExcel(dbgrid:tdbgrid):boolean;
const
xlNormal=-4143;
var
i,j,k:integer;
str,filename:string;
excel:OleVariant;
SavePlace:
TBookmark;
savedialog:tsavedialog;
ProgressBar1:TProgressBar;
begin
result:=false;
filename:='';
if
dbgrid.DataSource.DataSet.RecordCount>65536
then
begin
if
application.messagebox('需要导出的数据过大,Excel最大只能容纳65536行,是否还要继续?','询问',mb_yesno+mb_iconquestion)=idno
then
exit;
end;
screen.Cursor:=crHourGlass;
try
excel:=CreateOleObject('Excel.Application');
excel.workbooks.add;
except
screen.cursor:=crDefault;
showmessage('无法调用Excel!');
exit;
end;
savedialog:=tsavedialog.Create(nil);
savedialog.Filter:='Excel文件(*.xls)|*.xls';
if
savedialog.Execute
then
begin
if
FileExists(savedialog.FileName)
then
try
if
application.messagebox('该文件已经存在,要覆盖吗?','询问',mb_yesno+mb_iconquestion)=idyes
then
DeleteFile(PChar(savedialog.FileName))
else
begin
Excel.Quit;
savedialog.free;
screen.cursor:=crDefault;
Exit;
end;
except
Excel.Quit;
savedialog.free;
screen.cursor:=crDefault;
Exit;
end;
filename:=savedialog.FileName;
end;
savedialog.free;
application.ProcessMessages;
if
filename=''
then
begin
result:=false;
Excel.Quit;
screen.cursor:=crDefault;
exit;
end;
k:=0;
for
i:=0
to
dbgrid.Columns.count-1
do
begin
if
dbgrid.Columns.Items[i].Visible
then
begin
//Excel.Columns[k+1].ColumnWidth:=dbgrid.Columns.Items[i].Title.Column.Width;
excel.cells[1,k+1]:=dbgrid.Columns.Items[i].Title.Caption;
inc(k);
end;
end;
dbgrid.DataSource.DataSet.DisableControls;
saveplace:=dbgrid.DataSource.DataSet.GetBookmark;
dbgrid.DataSource.dataset.First;
i:=2;
if
dbgrid.DataSource.DataSet.recordcount>65536
then
ProgressBar1:=ProgressBarform(65536)
else
ProgressBar1:=ProgressBarform(dbgrid.DataSource.DataSet.recordcount);
while
not
dbgrid.DataSource.dataset.Eof
do
begin
k:=0;
for
j:=0
to
dbgrid.Columns.count-1
do
begin
if
dbgrid.Columns.Items[j].Visible
then
begin
excel.cells[i,k+1].NumberFormat:='@';
if
not
dbgrid.DataSource.dataset.fieldbyname(dbgrid.Columns.Items[j].FieldName).isnull
then
begin
str
:=
dbgrid.DataSource.dataset.fieldbyname(dbgrid.Columns.Items[j].FieldName).value;
Excel.Cells[i,
k
+
1]
:=
Str;
end;
inc(k);
end
else
continue;
end;
if
i=65536
then
break;
inc(i);
ProgressBar1.StepBy(1);
dbgrid.DataSource.dataset.next;
end;
progressbar1.Owner.Free;
application.ProcessMessages;
dbgrid.DataSource.dataset.GotoBookmark(SavePlace);
dbgrid.DataSource.dataset.EnableControls;
try
if
copy(FileName,length(FileName)-3,4)<>'.xls'
then
FileName:=FileName+'.xls';
Excel.ActiveWorkbook.SaveAs(FileName,xlNormal,'',
'',False,False);
except
Excel.Quit;
screen.cursor:=crDefault;
exit;
end;
//Excel.Visible
:=
true;
Excel.Quit;
screen.cursor:=crDefault;
Result:=
true;
end;
//将ADOQUERY的数据集导入到EXCEL中
function
queryExportToExcel(queryexport:tadoquery):boolean;
const
xlNormal=-4143;
var
i,j,k:integer;
str,filename:string;
excel:OleVariant;
savedialog:tsavedialog;
ProgressBar1:TProgressBar;
begin
result:=false;
filename:='';
if
queryexport.RecordCount>65536
then
begin
if
application.messagebox('需要导出的数据过大,Excel最大只能容纳65536行,是否还要继续?','询问',mb_yesno+mb_iconquestion)=idno
then
exit;
end;
screen.Cursor:=crHourGlass;
try
excel:=CreateOleObject('Excel.Application');
excel.workbooks.add;
except
screen.cursor:=crDefault;
showmessage('无法调用Excel!');
exit;
end;
savedialog:=tsavedialog.Create(nil);
savedialog.Filter:='Excel文件(*.xls)|*.xls';
if
savedialog.Execute
then
begin
if
FileExists(savedialog.FileName)
then
try
if
application.messagebox('该文件已经存在,要覆盖吗?','询问',mb_yesno+mb_iconquestion)=idyes
then
DeleteFile(PChar(savedialog.FileName))
else
begin
Excel.Quit;
savedialog.free;
screen.cursor:=crDefault;
Exit;
end;
except
Excel.Quit;
savedialog.free;
screen.cursor:=crDefault;
Exit;
end;
filename:=savedialog.FileName;
end;
savedialog.free;
application.ProcessMessages;
if
filename=''
then
begin
result:=false;
Excel.Quit;
screen.cursor:=crDefault;
exit;
end;
k:=0;
for
i:=0
to
queryexport.FieldCount-1
do
begin
excel.cells[1,k+1]:=queryexport.Fields[i].FieldName;
inc(k);
end;
queryexport.First;
i:=2;
if
queryexport.recordcount>65536
then
ProgressBar1:=ProgressBarform(65536)
else
ProgressBar1:=ProgressBarform(queryexport.recordcount);
while
not
queryexport.Eof
do
begin
k:=0;
for
j:=0
to
queryexport.FieldCount-1
do
begin
excel.cells[i,k+1].NumberFormat:='@';
if
not
queryexport.fieldbyname(queryexport.Fields[j].FieldName).isnull
then
begin
str:=queryexport.fieldbyname(queryexport.Fields[j].FieldName).AsString;
Excel.Cells[i,
k
+
1]
:=
Str;
end;
inc(k);
end;
if
i=65536
then
break;
inc(i);
ProgressBar1.StepBy(1);
queryexport.next;
end;
progressbar1.Owner.Free;
application.ProcessMessages;
try
if
copy(FileName,length(FileName)-3,4)<>'.xls'
then
FileName:=FileName+'.xls';
Excel.ActiveWorkbook.SaveAs(FileName,xlNormal,'',
'',False,False);
except
Excel.Quit;
screen.cursor:=crDefault;
exit;
end;
//Excel.Visible
:=
true;
Excel.Quit;
screen.cursor:=crDefault;
Result
:=
true;
end;
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式