常常用到的功能,将DBGrid导出到Excel


procedure Tfmpcxt.OutToExcel(sender:TDBGrid);
var
  i,j,m:integer;
  ExcelApp:Variant;
begin

  if TDBGrid(Sender).DataSource=nil then exit;
  if TDBGrid(Sender).DataSource.DataSet=nil then exit;
  if not TDBGrid(Sender).DataSource.DataSet.Active then exit;
  if TDBGrid(Sender).DataSource.DataSet.RecordCount<=0 then exit;
//  FHint:=TfrmFlash.Create(nil);
//  showmessage('1');
//  scExcelExport1:=TscExcelExport.Create(application);
  try
  //  Fhint.Show;
    //Fhint.Update;
    ExcelApp := CreateOleObject( 'Excel.Application' );
    ExcelApp.WorkBooks.Add;
    ExcelApp.WorkSheets.Add;
    ExcelApp.Visible:=true;
    j:=2;
    with TDBGrid(Sender).DataSource.DataSet do
    begin
      TDBGrid(Sender).DataSource.DataSet.First;
      TDBGrid(Sender).DataSource.DataSet.DisableControls;
      for i:=0 to TDBGrid(Sender).Columns.Count-1 do
      begin
        for m:=0 to TDBGrid(Sender).Columns.Count-1 do
        begin
          if TDBGrid(Sender).DataSource.DataSet.Fields[i].FieldName=TDBGrid(Sender).Columns[m].FieldName then
            ExcelApp.WorkSheets[1].Cells[1,i+1].Value :=TDBGrid(Sender).Columns[m].Title.Caption;
        end;
      end;
      while not TDBGrid(Sender).DataSource.DataSet.Eof do
      begin
        for i:=0 to FieldCount-1 do
        begin
          ExcelApp.WorkSheets[1].Cells[j,i+1].Value :=Fields[i].AsVariant;
        end;
        Next;
        j:=j+1;
      end;
    end;
  finally
    //scExcelExport1.free;
    TDBGrid(Sender).DataSource.DataSet.EnableControls;
//    Fhint.Free;
  end;
end;

posted on 2004-09-17 14:11  wenew  阅读(1487)  评论(1编辑  收藏  举报