怎样做成公用函数?

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;
...全文
50 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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中。要用时引用这个单元就行了。
C++课后答案: 2.1 C++语言中类 class 和结构 struct 的主要区别是什么? 【解答】在 C++中,对结构体做了一个很重要的扩充,即允许结构体包含函数成 员。如此一来,我们可以使用结构体中的数据成员描述对象的属性,使用结构体 中的函数成员描述对象的操作。 2.2 什么是类的接口,什么是类的实现? 【解答】 一般把仅含函数原型的类声明部分称为类的接口; 一个类的内部数据结构和其所有成员函数的定义部分称为类的实现。 2.3 公用 public 成员和私有 private 成员有何区别? 【解答】 私有 private 成员只能被该类中的其他成员访问,而程序中的其它代码是不能直接 访问这些变量的。 公用 public 成员既可以被该类的其他成员访问,也可以被程序中的其它代码访问。 类中的公用成员对外部代码是开放的,通常情况下,程序中的其它代码通过类的 公用成员函数来访问类的私有成员。 2.4 构造函数和析构函数的主要作用是什么?它们各自有什么特性? 【解答】 构造函数是类的一种特殊成员函数,用来为对象进行初始化(给对象的成员 变量赋初值、申请一些 系统资源、打开文件操作等)。在对象生成的时候自动执行初始化,这会消除任何 错误地不执行初始化的可能。这是 C++面向对象程序设计帮助减少复杂性的另一 途径。 析构函数的作用与构造函数正好相反,当对象被删除时,利用析构函数进行一 些善后处理。一般情况 下析构函数执行构造函数的逆操作,例如可以利用析构函数来释放构造函数所动 态申请的内存空间。

5,928

社区成员

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

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