我准备做一个下面功能:
提供dbgrid的导入导出功能,针对管理系统中每一张表或sql查询,均可以可选择字段(项目)及筛选条件批量地导出,并根求能支持多种格式(比如:txt,dbf,Excel,csv等等).
但dbgrid控件和DataSet组件都没有提供savetofile之类的函数.我记得以前用PB编程时,实现很方便,利用数据窗口的saveas()和import()就可以了并且支持数十种格式!!!难道delphi就没有类似的方法或者第三方控件也行.

解决方案 »

  1.   

    给你个思路,ADO可以驱动EXCEL哦,记录集拷贝你不会也做不了吧:-)
      

  2.   

    就算excel可以那么其它的格式呢?
     我是想大家讨论出个解决方案来,对于常用格式.
      

  3.   

    Toxsl(dbgrid1,'aaaaa');       //Uses Excel2000procedure TfrmZJ_ayhz.Toxsl(const DBGrid1: TDBGrid; S: string);
    var
        i,row,column:integer;
        ExcelApplication1: TExcelApplication;
        ExcelWorkbook1 : TExcelWorkbook;
        ExcelWorksheet1 : TExcelWorksheet;
    begin  Try    ExcelApplication1 := TExcelApplication.Create(self);
        ExcelApplication1.Connect;
        ExcelWorkbook1 := TExcelWorkbook.Create(self);
        ExcelWorksheet1 := TExcelWorksheet.Create(self);
      Except
        application.MessageBox('请先安装 Excel97 或 Excel2000 !','提示信息',mb_ok+mb_iconinformation);
        Abort;
      End;
      try
        ExcelApplication1.Visible[0]:=True;
        ExcelApplication1.Caption:=S;
        ExcelApplication1.Workbooks.Add(Null,0);
        ExcelWorkbook1.ConnectTo
        (ExcelApplication1.Workbooks[1]);
        ExcelWorksheet1.ConnectTo
        (ExcelWorkbook1.Worksheets[1] as _Worksheet);
        ExcelWorksheet1.Cells.Item[1,4]:=S;       //写入标题
        row:=3;
        column:=1;
        for i:=1 to DBGrid1.FieldCount do
        if DBGrid1.Columns[i-1].Visible then
        begin
        ExcelWorksheet1.Cells.NumberFormatLocal:='@';
        ExcelWorksheet1.Cells.Item[row,column]:=DBGrid1.Columns[i-1].Title.Caption;
        column:=column+1;
        end;                       //写入目录
        row:=row+1;
        DBGrid1.DataSource.DataSet.First;
        While Not(DBGrid1.DataSource.DataSet.Eof) do
        begin
        column:=1;
        for i:=1 to DBGrid1.FieldCount do
        if DBGrid1.Columns[i-1].Visible then
        begin
        ExcelWorksheet1.Cells.NumberFormatLocal:='@';
        ExcelWorksheet1.Cells.Item[row,column]:=DBGrid1.Fields[i-1].AsString;
        column:=column+1;
        end;
        row:=row+1;
        DBGrid1.DataSource.DataSet.Next;       //写入内容
        end;
      finally
        ExcelWorkbook1.Disconnect;
        ExcelWorksheet1.Disconnect;
        ExcelApplication1.Disconnect;
        ExcelApplication1.Quit;
        ExcelApplication1.Free;
    end;
    end;