我刚做完的一个项目里面的查询窗口的部分代码。我用的adodataset,和query用法基本相同。我为了省事所以用的variant变量,如果你想速度快的话就改用COM接口,编译的时候就可以纠错。
procedure Tfrmbomqry.ExportToExcel;
var
i,r: integer;
s: string;
ExcelApp: variant;
ws : variant
begin
if not dtqry.Active or (dtqry.RecordCount = 0) then Exit
frmwait.Show
bbtnexcel.Enabled := False
try
try
ExcelApp := CreateOleObject('Excel.Application');
ExcelApp.Visible:=True;
except
raise Exception.Create('您的计算机没有安装Excel2000以上版本或安装不正确,因此无法导出!!')
end
ExcelApp.Workbooks.Add(-4167);
ws:=ExcelApp.Workbooks[1].sheets[1];
ws.Name := 'BOM文件'
ws.Cells.NumberFormat := '@'
ws.Columns.ColumnWidth := 20;
r := 1
for i := 1 to 8 do ws.Cells[r,i] := GridTitles;
r := 2;
dtqry.DisableControls;
try
with dtqry do begin
First;
while not Eof do begin
for i := 1 to 8 do begin
s := GridFields;
del(s,1,2);//delete "a." or "b."
ws.Cells[r,i] := FieldByName(s).AsString;
end;
Next;
r := r + 1;
end;
end;//with
STMessageBox('统计数据已经导出至Excel中!','导出完毕',64)
finally
dtqry.EnableControls;
end;
finally
frmwait.Close
bbtnexcel.Enabled := True
end;
end;