我们在全部的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数据。