DBGridEh1 已经有数据了,button17就是将这些数据导出到excel,代码如下,但按下button17后系统没有任何操作,没有生成excel文件,请问如何将DBGridEh里的记录导出到excel?要在 uses 里引用什么么?我已经 uses DBGridEhImpExp 了。procedure Tfrmtkyw.Button17Click(Sender: TObject);
var
ExpClass:TDBGridEhExportClass;
Ext:String;
begin
  SaveDialog1.FileName := 'file1';
  if (ActiveControl is TDBGridEh) then
    if SaveDialog1.Execute then
    begin
      case SaveDialog1.FilterIndex of
        1: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;
        2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
        3: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'htm'; end;
        4: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;
        5: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;
      else
        ExpClass := nil; Ext := '';
    end;
    if ExpClass <> nil then
    begin
      if UpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3)) <> UpperCase(Ext) then
        SaveDialog1.FileName := SaveDialog1.FileName + '.' + Ext;
      SaveDBGridEhToExportFile(ExpClass,DBGridEh1,SaveDialog1.FileName,true);
      //其中false为局部数据
    end;
  end;
end;

解决方案 »

  1.   

    跟踪到SaveDBGridEhToExportFile函数里去看看,是不是你传的方法不对。只是猜一猜,没有用过这个控件。手动导数据到Excel倒是做过,方法嘛论坛里搜一下,有一堆
      

  2.   

    做过dbgrid到成excel,这个DBGridEh1没用过,帮你顶
      

  3.   

    楼主显示是看了EHLIB的示例
    去掉这个判断--->>>  if (ActiveControl is TDBGridEh) then
      

  4.   

    当你点导出的时候,当前ActiveControl.name='Button17'说明当前的activecontrol并是不是DBGRIDEH
      

  5.   

    //给你一个公共的数据导出过程:
    Procedure GridExport(AGrid: TDBGridEh);              //列表框导出
    var ExpClass:TDBGridEhExportClass;
        Ext:String;
    begin
      SaveDialog1.FileName := 'file1';
      if SaveDialog1.Execute then
      begin
        case SaveDialog1.FilterIndex of
          1: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;
          2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
          3: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'htm'; end;
          4: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;
          5: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;
        else
          ExpClass := nil; Ext := '';
        end;    if ExpClass <> nil then
        begin
          if UpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3)) <>
             UpperCase(Ext) then
            SaveDialog1.FileName := SaveDialog1.FileName + '.' + Ext;
          SaveDBGridEhToExportFile(ExpClass,AGrid,SaveDialog1.FileName,True)
        end;
      end;
    end;
      

  6.   

    回复人: smiler007(笑一笑) ( ) 信誉:118  2005-07-21 21:43:00  得分: 0       楼主显示是看了EHLIB的示例去掉这个判断--->>>  if (ActiveControl is TDBGridEh) then   
      

  7.   

    DBGridEh  给我一个这个控件 [email protected]
      

  8.   

    var
      DBGridEhToExcel: TDBGridEhToExcel;
    begin
      DBGridEhToExcel := TDBGridEhToExcel.Create(nil);
      try
        DBGridEhToExcel.TitleName := '测试测试测试测试测试测试测试';
        DBGridEhToExcel.BeginDate := '开始日期:2005-07-01';
        DBGridEhToExcel.EndDate := '结束日期:2005-07-18';
        DBGridEhToExcel.UserName := '系统管理员';
        DBGridEhToExcel.DBGridEh := DBGridEh1;
        DBGridEhToExcel.ShowProgress := True;
        DBGridEhToExcel.FileName := 'c:\123.xls';
        DBGridEhToExcel.ExportToExcel;
      finally
        DBGridEhToExcel.Free;
      end;
      

  9.   

    procedure Tfrmtkyw.Button17Click(Sender: TObject);
    var
    ExpClass:TDBGridEhExportClass;
    Ext:String;
    begin
      SaveDialog1.FileName := 'file1';
    //  if (ActiveControl is TDBGridEh) then  //请把此句去掉
        if SaveDialog1.Execute then
        begin
          case SaveDialog1.FilterIndex of
            1: begin ExpClass := TDBGridEhExportAsText; Ext := 'txt'; end;
            2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
            3: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'htm'; end;
            4: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;
            5: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'xls'; end;
          else
            ExpClass := nil; Ext := '';
        end;
        if ExpClass <> nil then
        begin
          if UpperCase(Copy(SaveDialog1.FileName,Length(SaveDialog1.FileName)-2,3)) <> UpperCase(Ext) then
            SaveDialog1.FileName := SaveDialog1.FileName + '.' + Ext;
          SaveDBGridEhToExportFile(ExpClass,DBGridEh1,SaveDialog1.FileName,true);
          //其中false为局部数据
        end;
    //  end;    //请把此句去掉
    end;
      

  10.   

    //dbgrideh数据导出
    procedure dbgridehtoexp(lsdbgrideh:tdbgrideh);
    var
      ExpClass:TDBGridEhExportClass;
      Ext:String;
      lssavedialog:tsavedialog;
    begin
      try
      lssavedialog:=tsavedialog.Create(nil);
      lssavedialog.Filter:='*.xls|*.xls|*.csv|*.csv|*.htm|*.htm|*.rtf|*.rtf|*.txt|*.txt';
      lssavedialog.FileName := 'file1';
        if lssavedialog.Execute then
        begin
          case lssavedialog.FilterIndex of
            1: begin ExpClass := TDBGridEhExportAsText; Ext := 'xls'; end;
            2: begin ExpClass := TDBGridEhExportAsCSV; Ext := 'csv'; end;
            3: begin ExpClass := TDBGridEhExportAsHTML; Ext := 'htm'; end;
            4: begin ExpClass := TDBGridEhExportAsRTF; Ext := 'rtf'; end;
            5: begin ExpClass := TDBGridEhExportAsXLS; Ext := 'txt'; end;
          else
            ExpClass := nil; Ext := '';
        end;
        if ExpClass <> nil then
        begin
          if UpperCase(Copy(lssavedialog.FileName,Length(lssavedialog.FileName)-2,3)) <> UpperCase(Ext) then
            lssavedialog.FileName := lssavedialog.FileName + '.' + Ext;
          if  FileExists(lssavedialog.FileName) then
            begin
              if application.MessageBox('文件名已存在,是否覆盖', '提示', MB_ICONASTERISK or MB_OKCANCEL)<>idok then
                begin
                  exit;
                end;
            end;
          Screen.Cursor := crHourGlass;
          SaveDBGridEhToExportFile(ExpClass,lsDBGridEh,lssavedialog.FileName,true);
          Screen.Cursor := crDefault;
        end;
      end;
      finally
        lssavedialog.Free;
      end;
    end;调用:dbgridehtoexp(dbgrideh1);
      

  11.   

    看看自带的demo啊,上面有很多导出的方法呢
      

  12.   

    我刚做了这个东西,原因很简单,就是ActiveControl is TDBGridEh的缘故,你所使用的这个函数,只有在你的dbgrideh为当前激活控件时,才行,所以如果你使用右键菜单来调用是可以的,但你现在用的是按钮,但你点击按钮是当前激活的空间是按钮,所不行了,解决的办法就是直接把你的dbgrideh传到函数里替代ActiveControl is TDBGridEh即可
      

  13.   

    我用的组件是DBGrid,Table,DataSource,DataBase,SaveDialog,Button.采用的是BDE数据库引擎.不行啊?
    老提示这个ExpClass:TDBGridEhExportClass;有误啊!!!!!
    请 hqhhh(枫叶)出来帮忙解答一下啊? 
    错误原因是:
    Unit1.pas(33):Undeclared identifier: 'TDBGridEhExportClass'
      

  14.   

    我的方法:
    放一个SaveDialog。 filter 设置为 :报表格式|*.xls
    function xlsORtxt(dataset:tdataset;filename:string):boolean;
    var
    f:textfile;
    tempstr:string;
    i,j:integer;
    begin
      try
      dataset.DisableControls;
      assignfile(f,filename);
      rewrite(f);
      dataset.First;
      tempstr:='';
      for i:=0 to dataset.FieldCount-1 do
      tempstr:=tempstr+dataset.Fields[i].FieldName+#9;
      writeln(f,tempstr);
      for i:=0 to dataset.RecordCount-1 do
        begin
          tempstr:='';
          for j:=0 to dataset.Fields.Count-1 do
            tempstr:=tempstr+dataset.fields[j].AsString+#9;
          writeln(f,tempstr);
          dataset.Next;
        end;
      result:=true;
      closefile(f);
    except
    closefile(f);
    result:=false;
    end;
    end;procedure TqueryForm.BitBtn3Click(Sender: TObject);
    begin
      with savedialog1 do
         if execute then
         begin
       if xlsORtxt(proc,filename) then   ///proc 就是数据源,当然也可以改为query 。   MessageBox(0,'数据已经保存!','系统提示',MB_OK+MB_ICONWARNING)
    else
        MessageBox(0,'数据库无法保存,请联系管理员!','系统提示',MB_OK+MB_ICONWARNING);
    end;
    end;