怎样做成公用函数?
实现sqlserxer2000导出excel,一下代码能实现,可是我有很多船体药用导,可不可以做成一个公用函数,我要用的时候直接datatoexcel就行了?如何做呢?在那里作?
function CreateExcel: _Application;
begin
try
Result := CoExcelApplication.Create;
except
MessageDlg('系统缺少Excel或者被损坏,请您安装或者修复Mirosoft Office后再使用该功能!',
mtconfirmation,[mbYes,mbNo],0);
end;
end;
function NewWorkBook(ExcelApp: _Application): _WorkBook;
begin
Result := ExcelApp.Workbooks.Add(XLWBatWorksheet, 0);
end;
function NewWorkSheet(ExcelApp: _Application): IDispatch; overload;
begin
Result := ExcelApp.Worksheets.Add(null, ExcelApp.ActiveSheet, 1, XLWBatWorksheet, 0);
end;
function NewWorkSheet(Book: _WorkBook): IDispatch; overload;
begin
Result := Book.Worksheets.Add(null, Book.ActiveSheet, 1, XLWBatWorksheet, 0);
end;
procedure SetCells(Sheet: Variant; x, y: Integer; const Value: String);
begin
Sheet.Cells[y, x] := Value;
end;
procedure DataSetToExcel(DataSet: TDataSet);
var ExcelApp:_Application; Book: _WorkBook; Sheet: IDispatch;
i, j: Integer; OldMark: TBookmark;
begin
if not DataSet.Active then DataSet.Active := true;
if DataSet.RecordCount>65536 then
if MessageDlg('需要导出的数据过大,Excel最大只能容纳65536行,是否还要继续?',
mtconfirmation,[mbYes,mbNo],0)=idYes then exit;
ExcelApp := CreateExcel;
if not VarIsEmpty(ExcelApp) then
try
Book := NewWorkBook(ExcelApp);
Sheet := Book.ActiveSheet;
for i:=0 to DataSet.FieldCount-1 do
SetCells(Sheet, i+1, 1, DataSet.Fields[i].DisplayName);
DataSet.DisableControls;
OldMark := DataSet.GetBookmark;
Dataset.First;
i := 1;
while not Dataset.Eof do begin
inc(i);
for j:=0 to DataSet.FieldCount-1 do
SetCells(Sheet, j+1, i, Dataset.Fields[j].AsString);
if i=65536 then
break;
//ProgressBar1.StepBy(1);
Dataset.next;
end;
Dataset.GotoBookmark(OldMark);
finally
Dataset.EnableControls;
ExcelApp.Visible[0] := True;
ExcelApp := nil;
end;
end;
procedure Tgudingzichanjixietaizhang.Button3Click(Sender: TObject);
begin
DataSetToExcel(adoquery1)
end;