请给一详细源码好吗,谢谢了

解决方案 »

  1.   

    procedure TFrm_Main.ExportDBGrid(FdbGrid: TDBgrideh; toExcel: Boolean);
    var
      bm: TBook;
      col, row: Integer;
      sline, rownum: string;
      mem: TMemo;
      ExcelApp: Variant;
      reccount, RowCount: Integer;
      MyDBSumList: TDBSumList;
    begin
      reccount := 0;
      MyDBSumList:=TDBSumList.Create(nil);
      MyDBSumList.DataSet := FDBGrid.DataSource.DataSet;
      MyDBSumList.SumCollection.Add;
      MyDBSumList.SumCollection.Items[0].GroupOperation := Gocount;
      MyDBSumList.SumCollection.Items[0].FieldName := FDBGrid.Fields[0].FullName;
      MyDBSumList.Active := True;
      RowCount := trunc(MyDBSumList.SumCollection.Items[0].SumValue);
      MyDBSumList.Free;
      Screen.Cursor := crHourglass;
      FDBGrid.DataSource.DataSet.DisableControls;
      bm := FDBGrid.DataSource.DataSet.GetBook;
      FDBGrid.DataSource.DataSet.First;
      if toExcel then
      begin
        ExcelApp := CreateOleObject('Excel.Application');
        ExcelApp.WorkBooks.Add(xlWBatWorkSheet);
      end;
      mem := TMemo.Create(nil);
      mem.Parent := Fdbgrid.Parent;
      mem.Visible := False;
      mem.Clear;
      sline := '';
      for col := 0 to FDBGrid.Columns.Count - 1 do
        sline := sline + FDBGrid.Columns[col].Title.Caption + #9;
      mem.Lines.Add(sline);
      for row := 1 to RowCount do
      begin
        sline := '';
        for col := 0 to FDBGrid.FieldCount - 1 do
        begin
          sline := sline + FDBGrid.Columns[col].DisplayText + #9;
        end;
        mem.Lines.Add(sline);
        if row mod 150 = 0 then
        begin
          mem.SelectAll;
          mem.CopyToClipboard;
          if toExcel then
          begin
            rownum := 'A' + inttostr(reccount + 1);
            ExcelApp.Workbooks[1].WorkSheets[1].Range[rownum].PasteSpecial;
            mem.Clear;
            Clipboard.Clear;
            reccount := row + 1;
          end;
        end;
        FDBGrid.DataSource.DataSet.Next;
      end;
      mem.SelectAll;
      mem.CopyToClipboard;
      if toExcel then
      begin
        rownum := 'A' + inttostr(reccount + 1);
        ExcelApp.Workbooks[1].WorkSheets[1].Range[rownum].PasteSpecial;
        ExcelApp.Visible := True;
      end;
      FreeAndNil(mem);
      FDBGrid.DataSource.DataSet.GotoBook(bm);
      FDBGrid.DataSource.DataSet.FreeBook(bm);
      FDBGrid.DataSource.DataSet.EnableControls;
      Screen.Cursor := crDefault;
    end;以上代码在D7下运行正确!