导出Excel1 - 项目分解篇

来源:互联网 发布:seo工程师认证 编辑:程序博客网 时间:2024/05/17 22:08

        我们在所有的MIS系统(信息管理系统)中都能见到他。所以我们把这个通用功能提出来。


       项目名称:车辆信息管理系统(中石化石炼)

       项目负责人:xiaobin

       项目时间:2006.12 - 2007.2


      Excel功能模块:


     单击事件(Event):

     procedure EXCELE1Click(Sender: TObject);


procedure TfrmMain.EXCELE1Click(Sender: TObject);var colnum,slnum,i:integer; headstr:string;begin  if DataSource_carNum.DataSet.RecordCount=0 then Exit;  //  DataModule_ado.ADODataSet_Excel.Close;  DataModule_ado.ADODataSet_Excel.Open;  //  TreeView1.Items.Clear;  Memo2.Lines.Clear ;  colnum:=DataModule_ado.ADODataSet_Excel.FieldDefList.Count;  Maxnum :=1;  //slnum:=0;  for i:=1 to colnum do  begin   slnum:=1;   headstr:=DataModule_ado.ADODataSet_Excel.FieldDefList[i-1].Name;   while Pos('|',headstr) > 0 do     begin      Delete(headstr, 1, Pos('|', headstr));      slnum:=slnum+1;     end;    if slNum>Maxnum then Maxnum:=slNum;  end;  treeADO(DataModule_ado.ADODataSet_Excel,TreeView1);  try    myexcel := createoleobject('excel.application');    myexcel.application.workbooks.add;    myexcel.caption:=pnlLog.Caption;    myexcel.application.visible:=true;    workbook:=myexcel.application.workbooks[1];    worksheet:=workbook.worksheets.item[1];  except    application.MessageBox('没有发现Excel,请安装office!','提示信息',                                                        MB_OK + MB_ICONINFORMATION);    exit;  end;  WriteheaderADO(DataModule_ado.ADODataSet_Excel,pnlLog.Caption,9,TreeView1);  WriteExcelData(DataModule_ado.ADODataSet_Excel);  //页脚设置  myexcel.activesheet.pagesetup.centerfooter:='第&P页';  //  worksheet.saveAs(excelDir+'\'+dateTimeStrFull+'lcbzsx.xls');  //workbook.close;  //myexcel.quit;  //add logmemo  frame1.addMemoLog(EXCELE1.Caption);end;

        代码注释:

        第6行:如果DataSource(Delphi控件)当前无数据,则退出此事件。

        第8行:DataModule_ado为DataModule(Delphi控件 - 数据容器)

        第13行:根据ADODataSet_Excel(Delphi控件 - ADODataSet)字段列表,得到Excel列数。

        第20-24行:多表头层数计算。

                              大部分我们用:父表头|子表头|孙表头,来表示一个多表头数据。

     第27行:执行treeADO子过程,把表头的层次关系用TreeView(Delphi控件)表示出来。

        第28-39行:初始化Excel对象。

                               myExcel:variant;                    //电子表格对象

                               workbook:olevariant;           //电子表格部分

                               worksheet:olevariant;          //电子表格工作簿

        第40行:执行WriteheaderADO子过程,写Excel表头。

        第41行:执行WriteExcelData子过程, 写Excel数据。



0 0