我想将DBGRIDEH中的数据导出为EXCEL文件,用以下指令出现错误,
SaveDBGridEhToExportFile(TDBGridEhExportAsXls,DBGridEh1,savedialog1.filename,false);
是不是要添加什么模块?
谢谢

解决方案 »

  1.   

    是的,加入DBGridEhImpExp单元,语句为SaveDBGridEhToExportFile(ExpClass,DBGridEh1,SaveDialog1.FileName,True);
      

  2.   

    1、语句
    DataSetToExcel(DM.q_sjcx,1,true,title);
    2、调用
    unit UExcelTools;interfaceuses
      classes, comctrls, stdctrls, windows, Dialogs, controls, SysUtils,
      Db,forms,DBClient,ComObj;//把数据集导入ExcelSheet的核心函数
    {function DataSetToExcelSheet
                (
                 DataSet     :TDataSet;
                 FieldTagMax :Integer;   // 字段的Tag值如果大于这个值,就不导出到Excel
                 Sheet       :OleVariant
                 ): Boolean;}
    Function DataSetToExcelSheet(DataSet:TDataSet;FieldTagMax:Integer;Sheet:OleVariant;strTitle:string): Boolean;
    //实际使用的函数,内部调用了DataSetToExcelSheet,在外面加入UI接口和错误处理
    {function DataSetToExcel
                (
                 DataSet     :TDataSet;   // 要转换的数据集
                 FieldTagMax :Integer;  // 字段的Tag值如果大于这个值,就不导出到Excel
                 Visible     :Boolean;      // 是否让做转换工作的Excel可见
                 ExcelFileName:String='' // Excel文件名,*.xls
                 ): Boolean;}Function DataSetToExcel(
                      DataSet:TDataSet;FieldTagMax:Integer;
                      Visible:Boolean;ExcelFileName:String='';strTitle:string=''): Boolean;
    implementationFunction DataSetToExcelSheet(DataSet:TDataSet;FieldTagMax:Integer;Sheet:OleVariant;strTitle:string): Boolean;
    var
       Row,Col,FieldIndex :Integer;
       BK:TBookMark;
    begin
       Result := False;
       if not Dataset.Active then exit;
       BK:=DataSet.GetBookMark;
       DataSet.DisableControls;
       Sheet.Activate;
       try
         // 列标题
         Row:=2;
         Col:=1;
         for FieldIndex:=0 to DataSet.FieldCount-1 do
             begin
             //if DataSet.Fields[FieldIndex].Tag <= FieldTagMax then
             if DataSet.Fields[FieldIndex].Tag >= FieldTagMax then
                begin
                Sheet.Cells(Row,Col)  :=DataSet.Fields[FieldIndex].DisplayLabel;
                Inc(Col);
                end;
             end;
         // 表内容
         DataSet.First;
         while Not DataSet.Eof do
            begin
            Row:=Row+1;
            Col:=1;
            for FieldIndex:=0 to DataSet.FieldCount-1 do
                begin
                //if DataSet.Fields[FieldIndex].Tag <= FieldTagMax then
                if DataSet.Fields[FieldIndex].Tag >= FieldTagMax then
                   begin
                   Sheet.Cells(Row,Col):=DataSet.Fields[FieldIndex].AsString;
                   Inc(Col);
                   end;
                end;
            DataSet.Next;
            end;
         Sheet.Cells(1,int(Col/2)-1):=strTitle;
         Result := True;
         finally
           DataSet.GotoBookMark(BK);
           DataSet.EnableControls;
        end;
    end;
    Function DataSetToExcel(
                      DataSet:TDataSet;FieldTagMax:Integer;
                      Visible:Boolean;ExcelFileName:String='';strTitle:string=''): Boolean;
    var
       ExcelObj, Excel, WorkBook, Sheet: OleVariant;
       OldCursor:TCursor;
       SaveDialog:TSaveDialog;
    begin
       Result := False;
       if not Dataset.Active then exit;   OldCursor:=Screen.Cursor;
       Screen.Cursor:=crHourGlass;   try
          ExcelObj := CreateOleObject('Excel.Sheet');
          Excel := ExcelObj.Application;
          Excel.Visible := Visible ;
          WorkBook := Excel.Workbooks.Add ;
          Sheet:= WorkBook.Sheets[1];
       except
          MessageBox(GetActiveWindow,'无法调用Mircorsoft Excel! '+chr(13)+chr(10)+
                        '请检查是否安装了Mircorsoft Excel。','提示',MB_OK+MB_ICONINFORMATION);
          Screen.Cursor:=OldCursor;
          Exit;
       end;   Result:=DataSetToExcelSheet(DataSet,FieldTagMax,Sheet,strTitle) ;
       if Result then
          if Not Visible then
             begin
             if ExcelFileName<>''
                then WorkBook.SaveAs(FileName:=ExcelFileName)
                else begin
                     SaveDialog:=TSaveDialog.Create(Nil);
                     SaveDialog.Filter := 'Microsoft Excel 文件|*.xls';
                     Result:=SaveDialog.Execute;
                     UpdateWindow(GetActiveWindow);
                     if Result then
                        WorkBook.SaveAs(FileName:=SaveDialog.FileName);
                     SaveDialog.Free;
                     end;
             Excel.Quit;
             end;
       Screen.Cursor:=OldCursor;
    end;end.