如何把dbgrid中的数据导入到excel中?

解决方案 »

  1.   

    自己用的一个过程,把数据集导如导excel,adsdata可以换成任意你用导的数据集
    WriteExcel(AdsData:Tclientdataset; sName, Title: string);
    var
      ExcelApplication1: TExcelApplication;
      ExcelWorksheet1: TExcelWorksheet;
      ExcelWorkbook1: TExcelWorkbook;
      i, j: integer;
      filename: string;
    begin
      filename := concat(sName, '.xls');
      try
        ExcelApplication1 := TExcelApplication.Create(Application);
        ExcelWorksheet1 := TExcelWorksheet.Create(Application);
        ExcelWorkbook1 := TExcelWorkbook.Create(Application);
        ExcelApplication1.Connect;
      except
        Application.Messagebox('Excel没有安装!','Hello',MB_ICONERROR + mb_Ok);
        Abort;
       end;
       try
         ExcelApplication1.Workbooks.Add(EmptyParam, 0);
         ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
         ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _worksheet);
         AdsData.First;
        for j := 0 to AdsData.Fields.Count - 1 do
        begin
          ExcelWorksheet1.Cells.item[3, j + 1] := AdsData.Fields[j].DisplayLabel;
          ExcelWorksheet1.Cells.item[3, j + 1].font.size :='10';
        end;
        for i := 4 to AdsData.RecordCount + 3 do
        begin
          for j := 0 to AdsData.Fields.Count - 1 do
          begin
            ExcelWorksheet1.Cells.item[i, j + 1] :=
            AdsData.Fields[j].Asstring;
            ExcelWorksheet1.Cells.item[i, j + 1].font.size := '10';
          end;
          AdsData.Next;
      end;
      ExcelWorksheet1.Columns.AutoFit;
      ExcelWorksheet1.Cells.item[1, 2] := Title;
      ExcelWorksheet1.Cells.Item[1, 2].font.size :='14';
      ExcelWorksheet1.SaveAs(filename);
      Application.Messagebox(pchar('数据成功导出'+ filename),'信息化建设部',mb_Ok);
      finally
        ExcelApplication1.Disconnect;
        ExcelApplication1.Quit;
        ExcelApplication1.Free;
        ExcelWorksheet1.Free;
        ExcelWorkbook1.Free;
      end;
    end;
      

  2.   

    tiexinliu(铁心刘) 是源码仓库的站长吧!!好厉害的。
      

  3.   

    转function ExportToExcel(Header: String;
      vDataSet: TDataSet): Boolean;
    var
      I,VL_I,j: integer;
      S,SysPath: string;
      MsExcel:Variant;
    begin
      Result:=true;
      if Application.MessageBox('您确信将数据导入到Excel吗?','提示!',MB_OKCANCEL + MB_DEFBUTTON1) = IDOK then
      begin
          SysPath:=ExtractFilePath(application.exename);
          with TStringList.Create do
          try
            vDataSet.First ;
            S:=S+Header;
        //    system.Delete(s,1,1);
            add(s);
            s:='';
            For I:=0 to vDataSet.fieldcount-1 do
              begin
                If vDataSet.fields[I].visible=true then
                   S:=S+#9+vDataSet.fields[I].displaylabel;
              end;
            system.Delete(s,1,1);
            add(s);
            while not vDataSet.Eof do
            begin
              S := '';
              for I := 0 to vDataSet.FieldCount -1 do
                begin
                  If vDataSet.fields[I].visible=true then
                     S := S + #9 + vDataSet.Fields[I].AsString;
                end;
              System.Delete(S, 1, 1);
              Add(S);
              vDataSet.Next;
            end;
            Try
              SaveToFile(SysPath+'\Tem.xls');
            Except
              ShowMessage('写文件时发生保护性错误,Excel 如在运行,请先关闭!');
              Result:=false;
              exit;
            end;
          finally
            Free;
          end;
          Try
            MSExcel:=CreateOleObject('Excel.Application');
          Except
            ShowMessage('Excel 没有安装,请先安装!');
            Result:=false;
            exit;
          end;
          Try
            MSExcel.workbooks.open(SysPath+'\Tem.xls');
          Except
            ShowMessage('打开临时文件时出错,请检查'+SysPath+'\Tem.xls');
            Result:=false;
            exit;
          end;
            MSExcel.visible:=True;
            for VL_I :=1 to 4 do
            MSExcel.Selection.Borders[VL_I].LineStyle := 0;
            MSExcel.cells.select;
            MSExcel.Selection.HorizontalAlignment :=3;
            MSExcel.Selection.Borders[1].LineStyle := 0;      MSExcel.Range['A1'].Select;
          MSExcel.Selection.Font.Size :=24;      J:=0 ;
          for i:=0 to vdataset.fieldcount-1 do
              if vDataSet.fields[I].visible  then
                 J:=J+1;      VL_I :=J;
          MSExcel.Range['A1:'+F_ColumnName(VL_I)+'1'].Select;
          MSExcel.Range['A1:'+F_ColumnName(VL_I)+'1'].Merge;
      end
      else
        Result:=false;
    end;
      

  4.   

    tiexinliu(铁心刘)你那代马没用啊
      

  5.   

    怎么没有啊,只要把dbgird对应的dataset传进去,再加上文件名和自定义的标题就可以了.