function datasettoexcelsheet(dataset:tdataset;fieldtagmax:integer;sheet:olevariant): boolean;
var
row,col,fieldindex :integer;
bk:tbookmark;
begin
result := false;
if not dataset.active then exit;
bk:=dataset.getbookmark;
dataset.disablecontrols;
sheet.activate;
try
// 列标题
row:=1;
col:=1;
for fieldindex:=0 to dataset.fieldcount-1 do
begin
if dataset.fields[fieldindex].tag <= fieldtagmax then
begin
sheet.cells(row,col) :=dataset.fields[fieldindex].displaylabel;
inc(col);
end;
end;
// 表内容
dataset.first;
while not dataset.eof do
begin
row:=row+1;
col:=1;
for fieldindex:=0 to dataset.fieldcount-1 do
begin
if dataset.fields[fieldindex].tag <= fieldtagmax then
begin
sheet.cells(row,col):=dataset.fields[fieldindex].asstring;
inc(col);
end;
end;
dataset.next;
end;
result := true;
finally
dataset.gotobookmark(bk);
dataset.enablecontrols;
end;
end;
function datasettoexcel(
dataset:tdataset;fieldtagmax:integer;
visible:boolean;excelfilename:string=''): boolean;
var
excelobj, excel, workbook, sheet: olevariant;
oldcursor:tcursor;
savedialog:tsavedialog;
begin
result := false;
if not dataset.active then exit;
result:=datasettoexcelsheet(dataset,fieldtagmax,sheet) ;
if result then
if not visible then
begin
if excelfilename<>''
then workbook.saveas(filename:=excelfilename)
else begin
savedialog:=tsavedialog.create(nil);
savedialog.filter := 'microsoft excel 文件|*.xls';
result:=savedialog.execute;
updatewindow(getactivewindow);
if result then
workbook.saveas(filename:=savedialog.filename);
savedialog.free;
end;
excel.quit;
end;
screen.cursor:=oldcursor;
end;