如何将数据库内容在程序中直接导出到EXCEL?(100分)

  • 主题发起人 主题发起人 xjlaokai2000
  • 开始时间 开始时间
X

xjlaokai2000

Unregistered / Unconfirmed
GUEST, unregistred user!
我的一个设想是直接把 DBGrid 中的内容,一条条记录地写入到 Excel中,但又不知怎么做,不知还有没有更好的方法。help!!!
 
procedure TFmavin.E3Click(Sender: TObject);
var
myexcel:variant;
workbook:olevariant;
worksheet:olevariant;
i,j:integer;
begin
if application.MessageBox('确认要导出数据吗?如果数据量过大,将会有一段时间不能响应!','警告!',MB_OKCANCEL+MB_ICONQUESTION)=IDCANCEL then
exit;
try
myexcel:=createoleobject('excel.application');
myexcel.application.workbooks.add;
myexcel.caption:='将数据导入到EXCEL表中';
myexcel.application.visible:=true;
workbook:=myexcel.application.workbooks[1];
worksheet:=workbook.worksheets.item[1];
except
showmessage('请确认EXCEL安装正确!');
end;
Fmain.StatusBar.Panels.Items[1].Text:='正在导出数据,请稍后!';
Fmain.Cursor:=crSQLWait;
with dm do
begin
i:=0;
ADOQuery2.first;
while not ADOQuery2.eof do
begin
inc(i);
for j:=0 to ADOQuery2.fieldcount-1 do
worksheet.cells[i,j+1]:=ADOQuery2.Fields[j].asstring;
ADOQuery2.next;
end;
end;
Fmain.StatusBar.Panels.Items[1].Text:='导出数据完毕!';
Fmain.Cursor:=crDefault;
end;
 
楼上的兄弟写的很全面了,还有一个方法,用EHLIB导出数据库非常容易,可见即可得的。
 
procedure TForm1.EXCEL2Click(Sender: TObject);
var
eclApp,WorkBook:Variant;//声明为OLE Automation 对象
xlsFileName:string;
i,j,n:integer;
begin
if SaveDialog1.Execute then
begin
xlsFileName:=SaveDialog1.FileName;
if fileexists(SaveDialog1.FileName) then DeleteFile(SaveDialog1.FileName);
try
//创建OLE对象Excel Application与 WorkBook
eclApp:=CreateOleObject('Excel.Application');
WorkBook:=CreateOleobject('Excel.Sheet');
except
ShowMessage('您的机器里未安装Microsoft Excel。');
Exit;
end;
try

Screen.Cursor:=crHourGlass;
workBook:=eclApp.workBooks.Add;
i:=1; //EXECL表行号
n:=0;//query字段N序号
Query1.First;
j:=1;
for n:=0 to Query1.FieldCount -1 do
begin
eclApp.Cells(i,j):=Query1.fields[n].DisplayLabel;
j:=j+1;
end;
i:=2; //EXECL表行号
n:=0;//query字段N序号
while not Query1.Eof do begin
j:=1;//EXECL表列号
for n:=0 to Query1.FieldCount -1 do
begin
eclApp.Cells(i,j):=Query1.fields[n].AsString;
j:=j+1;
end;
Query1.Next;
i:=i+1;
end;

WorkBook.SaveAs(xlsFileName);
Application.MessageBox('操作在没有警告的情况下正常结束!','完成',mb_ok+mb_iconinformation);
WorkBook.close;
eclApp.Quit;//退出Excel Application
eclApp:=Unassigned;//释放VARIANT变量
Screen.Cursor:=crdefault;
except
ShowMessage('不能正确操作Excel文件。可能是该文件已被其他程序打开,或系统错误。');
WorkBook.close;
eclApp.Quit;
//释放VARIANT变量
eclApp:=Unassigned;
end;
END;
END;
 
用dxdbgrid也可以把数据导出到excel中。
 
多人接受答案了。
 
后退
顶部