unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Excel2000, OleServer, Grids, DBGrids, DB, ADODB;
type
TForm1 = class(TForm)
ADOQuery1: TADOQuery;
DataSource1: TDataSource;
ExcelApplication1: TExcelApplication;
ExcelWorksheet1: TExcelWorksheet;
ExcelWorkbook1: TExcelWorkbook;
Button1: TButton;
ADOTable1: TADOTable;
DBGrid1: TDBGrid;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
Procedure WriteData;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var empty:OleVariant;
begin
try
Excelapplication1.Connect;
except
MessageDlg('Excel可能没有安装', mtError, [mbOk], 0);
Abort;
end;
ExcelApplication1.Visible[0] := True;
try
empty := EmptyParam;
//添加一个新工作簿
ExcelApplication1.Workbooks.Add(empty,0);
//组件和工作簿连接
ExcelWorkBook1.ConnectTo(ExcelApplication1.Workbooks.Item[
ExcelApplication1.Workbooks.Count]);
//激活工作簿
ExcelWorkBook1.Activate ;
//组件和工作表连接
ExcelWorksheet1.ConnectTo((ExcelWorkbook1.Worksheets[1] as _WorkSheet));
//调用自定义函数将数据库中的数据保存到工作表中
WriteData;
except
ExcelWorkBook1.Close(xlDoNotSaveChanges);
ExcelApplication1.Disconnect;
end;
end;
//自定义函数用于从数据库中逐行的读取数据
//并写入当前工作表中
procedure TForm1.WriteData;
var Col:Char;
Row,j:integer;
R:String;
begin
with ADOTable1 do
begin
//从第一条记录开始
first;
Col := 'A'; //第一列为A
Row := 1; //从第一行开始
while not eof do
begin
//从数据库中每一行中逐个读取各个字段数值
for j :=0 to Fields.Count-1 do
begin
//指定范围
R := String(Col) + IntToStr(Row);
//将数据库中的数据写入Excel中
ExcelWorksheet1.Range[R,R].Value2 := Fields.Fields[j].Value ;
//得到下一列,依次为A、B、C……
Col := Chr(Ord(Col)+1);
end;
Inc(Row); //下一行
Col := 'A'; //重新指向第1列
Next; //下一条记录
end;
end;
end;
end.