怎样做成公用函数?

ayukowa 2003-06-30 03:30:48
实现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;
...全文
46 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
whxhz80 2003-06-30
  • 打赏
  • 举报
回复
在implementation前声明
在implementation后实现

要调用的地方就引用这个单元
(第一个写错了,“引用”)
whxhz80 2003-06-30
  • 打赏
  • 举报
回复
在implementation前声明
在implementation后实现

要调用的地方就应用这个单元
Linux2001 2003-06-30
  • 打赏
  • 举报
回复
昏死过去了
things 2003-06-30
  • 打赏
  • 举报
回复
把其他窗体要用的函数单独放在一个单元(unit)中,其他窗体调用时,引用该窗体即可。
hch_45 2003-06-30
  • 打赏
  • 举报
回复
将datatoexcel定义在interface和implementation中。要用时引用这个单元就行了。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧