procedure ToExcel(DBGrid:TDBGrid); var ExcelApp: Variant; i,j,k:integer; FileName:string; DlgSave:TsaveDialog; Begin DlgSave:=TsaveDialog.Create(nil); DlgSave.Filter:='*.xls|*.xls'; if DlgSave.Execute then Begin application.ProcessMessages; Filename:=DlgSave.FileName; ExcelApp := CreateOleObject( 'Excel.Application' );
我是这样实现的 //导出数据到Excel procedure ToExcel(DBGrid:TDBGrid); var ExcelApp: Variant; i,j,k:integer; FileName:string; DlgSave:TsaveDialog; Begin DlgSave:=TsaveDialog.Create(nil); DlgSave.Filter:='*.xls|*.xls'; if DlgSave.Execute then Begin application.ProcessMessages; Filename:=DlgSave.FileName; ExcelApp := CreateOleObject( 'Excel.Application' ); ExcelApp.Caption :='能创监控系统日志数据';//'Microsoft Excel'; ExcelApp.WorkBooks.Add; application.ProcessMessages; ExcelApp.WorkSheets[1].Activate; K:=1; For i:=0 To DBGrid.Columns.Count-1 Do Begin if DBGrid.Columns[i].Visible Then Begin ExcelApp.Cells[1,K]:=DBGrid.Columns[i].Title.Caption; k:=k+1; End;{if} End;{for} ExcelApp.rows[1].font.name:='宋体'; ExcelApp.rows[1].font.size:=10; ExcelApp.rows[1].Font.Color:=clBlack; ExcelApp.rows[1].Font.Bold:=true; j:=1; For i:=0 To DBGrid.Columns.Count-1 Do Begin If DBGrid.Columns[i].Visible Then Begin ADOQuery_DB.First; for k:=1 To ADOQuery_DB.RecordCount-1 Do Begin ExcelApp.Cells[K+1,j]:=ADOQuery_DB.FieldByName(DBGrid.Columns[i].FieldName).Asstring; ADOQuery_DB.Next; End;{for} j:=j+1; End;{if} End;{for} For I:=1 To ADOQuery_DB.recordcount Do ExcelApp.rows[i].Font.SIZE:=9; ExcelApp.Columns.AutoFit; ExcelApp.ActiveWorkBook.SaveAs(FileName); ExcelApp.WorkBooks.Close; Application.MessageBox('数据导出成功....','数据导出',0); ExcelApp.Quit; ExcelApp:=Unassigned; DlgSave.Destroy; End; end;