我用cxGrid连接主从表,在导出excel的时候只能导出一个表的数据,要么是主表的,要么是从表的。请问有哪位高手可以帮在下解答这个问题?

解决方案 »

  1.   

    我觉的最好是自己编程实现,用sql把数据选出来,然后再导入excel,编程就可以了
      

  2.   

    哦,litangel兄可以把你的代码发给我参考一下吗?谢谢,给分的。
    mail: [email protected]
      

  3.   

    哈哈,抢分。导出代码如下:
    procedure TzwcxTreeList.ExportToExcel;
    var
          SaveDialog: TSaveDialog;
          fileName: string;      Excel,
          WorkBook,
          WorkSheet: Variant;      r,
          c: Integer;
    begin
         if VisibleColumnCount <= 0 then begin
                MessageBox(GetActiveWindow, '导出失败,表格数据为空', '警告提示', MB_ICONWARNING or MB_OK);
                Exit;
          end;      try
                Excel := CreateOleObject('Excel.Application');
          except
                on e: Exception do begin
                      MessageBox(GetActiveWindow, '导出失败,请先安装电子表格Microsoft Excel', '警告提示', MB_ICONWARNING or MB_OK);
                      Excel := null;
                      Exit;
                end;
          end;      SaveDialog := TSaveDialog.Create(Self);
          SaveDialog.Filter := 'Excel表格|*.xls';      if SaveDialog.Execute then
                fileName := SaveDialog.FileName
          else
                Exit;      try
                WorkBook := Excel.Application.WorkBooks.Add;
                WorkSheet := WorkBook.WorkSheets[1];            //列
                for c := 0 to VisibleColumnCount - 1 do begin
                      WorkSheet.Cells[1].NumberFormat := '@';
                      WorkSheet.Cells[1, c + 1].Value := VisibleColumns[c].Caption.Text;
                end;            //行
                for r := 0 to Count - 1 do begin
                      for c := 0 to VisibleColumnCount - 1 do begin
                            WorkSheet.Cells[r + 2, c + 1].Value := Nodes[r].Texts[getCOlIndex(c)];
                      end;
                end;            try
                      if WorkBook.SaveAs(fileName) then begin
                            MessageBox(GetActiveWindow, pchar('成功导出到文件' + fileName), '提示', MB_ICONINFORMATION or MB_OK);
                      end;
                except
                      on e: Exception do begin
                            MessageBox(GetActiveWindow, '放弃保存', '提示', MB_ICONWARNING or MB_OK);
                            exit;
                      end;
                end;
          except
                on e: Exception do begin
                      MessageBox(GetActiveWindow, PChar(e.Message), '警告', MB_ICONWARNING or MB_OK);
                      WorkBook.Saved := True;
                      WorkBook := null;
                      Excel.Quit;
                      Excel := null;
                      Exit;
                end;
          end;      WorkBook.Saved := True;
          WorkBook := null;
          Excel.Quit;
          Excel := null;
    end;
      

  4.   

    chenyansong(Batistuta) 兄,你的好像不是cxGrid的吧
      

  5.   

    代码N长呀。原来就是到数据库取数据,然后通过OLE方式,写到EXCEL文件里呀。我们的所有导出都是这样做的。
      

  6.   

    也可以不到数据库取数据,从cxGRID里取数据,也是一样的。然后通过OLE方式,写到EXCEL文件里。
      

  7.   

    从cxGRID里取数据,就是遍历cxGRID的View.DataController从表的数据,就是遍历cxGRID的View.DataController.GetDetailDataController(i, 0),它也是一个
    DataController。导出到EXCEL,通过OLE方式,网上N多的代码。
      

  8.   

    我贴过很多这样的代码,
    你可以参考一下
    http://community.csdn.net/Expert/topic/4988/4988584.xml?temp=.6824152
    的代码。
      

  9.   

    既然都没好办法,能不能这样?先将主表的数据导入到excel,然后将从表的数据添加到已经存在的excel里?
      

  10.   

    ///既然都没好办法,能不能这样?先将主表的数据导入到excel,然后将从表的数据添加到已经存在的excel里?不用这样。
    象我说的:
    从cxGRID里取数据,就是遍历cxGRID的View.DataController
    从表的数据,就是遍历cxGRID的View.DataController.GetDetailDataController(i, 0),它也是一个DataController。把数据写到一个大的Variant数组里。然后把Variant数组里的数据一次性地写到Excel里就可以了。