Output DBGRID to Excel form - method one (support multi-sheet) {function description: output DBGRID to Excel form (support multi-sheet) call format: CopyDbdataToExcel ([dbgrid1, dbgrid2]);} Procedure CopyDbdatoExcel (args: array Of const); Var iCount, JCount: Integer; xlapp: variant; sheet: variant; i: integer; begin screen.cursor: = cr Hourglass; if not varisempty (xlapp) THEN begin xlapp.displayalerts: = false VarClear (xLApp); end; try xLApp: = CreateOleObject ( 'Excel.Application'); except Screen.Cursor: = crDefault; Exit; end; XLApp.WorkBooks.Add; XLApp.SheetsInNewWorkbook: = High (Args) 1; For i: = low (args) to high (args) do begin xlapp.workbooks [1] .worksheets [i 1] .name: = tdbgrid (args [i] .vobject) .Name; Sheet: = xlapp.workbooks [1] .Worksheets [TDBGRID (args [i] .vobject) .name]; if not tdbgrid (args [i] .vobject) .datasource.DataSet.active dam screen.cursor: = crdefault; exit; end; tdbgrid (Args [i] .vobject) .datasource.DataSet.first; for iCount: = 0 to tdbgrid (args [i] .vobject) .COLUMNS.CO Unt - 1 Do Sheet.cells [1, ICOUNT 1]: = TDBGRID (args [i] .vobject) .COLUMNS.ITEMS [ICOUNT] .title.caption; jcount: = 1; While Not TdbGrid (args [i] .Vobject) .datasource.DataSet.eof do begin for iCount: = 0 to tdbgrid (args [i] .vobject) .COLUMNS.COUNT - 1 Do Sheet.cells [JCOUNT 1, ICOUNT 1]: = TDBGRID (Args [I] .vobject) .COLUMns.Items [iCount] .field.Asstring; inc (jcount); tdbgrid (args [i] .vobject) .datasource.DataSet.next; end; xlapp.visible: = true; END; Screen.cursor: = crdefault; end; DBGRID data Import into Excel - Method IIUT UNIT1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, Db, DBTables, Excel97, OleServer, Word97; type TForm1 = class (TForm) ExcelApplication1: TExcelApplication; ExcelWorkbook1: TExcelWorkbook; ExcelWorksheet1 : TExcelWorksheet; Table1: TTable; DataSource1: TDataSource; DBGrid1: TDBGrid; Button1: TButton; Button4: TButton; WordApplication1: TWordApplication; WordDocument1: TWordDocument; procedure Button1Click (Sender: TObject); procedure Button4Click (Sender: TObject); private {Private declarations} public {public declarations} end; var Form1: TForm1; implementation {$ R * .DFM} procedure TForm1.Button1Click (Sender: TObject); var i, row, column: integer; begin Try ExcelApplication1.Connect; Except MessageDlg ( 'Excel May Not Be Installed', MTERROR, [Mbok], 0); Abort; End; Excelapplication1.visible [0]: = true; ExceLApplication1.caption: = 'Excel Application'; EXC elApplication1.Workbooks.Add (Null, 0); ExcelWorkbook1.ConnectTo (ExcelApplication1.Workbooks [1]); ExcelWorksheet1.ConnectTo (ExcelWorkbook1.Worksheets [1] as _Worksheet); DBGrid.DataSource.DataSet.Open; row: = 1; While Not (DBGRID.DataSource.DataSet.eof) Do Begin Column: = 1; for i: = 1 to dbgrid.datasource.DataSet.fieldCount Do Begin Excelworksheet1.cells.item [Row, Column]: = dbgrid.datasource.DataSet .fields [i - 1] .sstring; column: = column 1; end; dbgrid.datasource.dataset.next; row: = row 1; end; end; procedure tform1.button4click (sender: TOBJECT); begin Excelapplication1 EXCELAPPLICATION1.QUIT; END;
. End of a boot process will dbgrid excel document, the need to reference unit comoby, a control ExcelApplication1: procedure CopyDbDataToExcel (Target: TDbgrid); var iCount, jCount: Integer; XLApp: Variant; Sheet: Variant; begin Screen.Cursor: = crHourGlass; if not VarIsEmpty (xLApp) then begin XLApp.DisplayAlerts: = False; xLApp.Quit; VarClear (xLApp); end; // Create Excel object by ole try xLApp: = CreateOleObject ( 'Excel.Application'); except Screen .Cursor: = crdefault; exit; end; xlapp.workbooks.add [xlwbatworksheet]; xlapp.workbooks [1] .Worksheets [1] .name: = 'test work thin'; Sheet: = xlapp.workbooks [1]. Worksheets ['Test Works "]; if not target.datasource.dataset.active dam screen.cursor: = crdefault; exit; end; target.datasource.dataset.first; for iCount: = 0 to target.columns.count - 1 Do Begin Sheet.cells [1, ICOUNT 1]: = target.columns.Items [iCount] .title.caption; end; jcount: = 1; while not target.datasource.DataSet.eof do begin for iCount: = 0 to target.columns.count - 1 do begin sheet.cells [jcount 1, iCount 1]: = target.columns.items [iCount] .field .AsString; end; Inc (jCount); Target.DataSource.DataSet.Next; end; XlApp.Visible: = True; Screen.Cursor: = crDefault; end; // call the procedure TForm2.SpeedButton5Click (Sender: TObject); begin copyDbDataToExcel (dbgrid1); end; DBGrid --- method of introducing four Excel uses DBGrids, ComObj, db; Function PDBGridExportToExcel (Dbgrid: tdbgrid; title: string): boolean; const {XlSheetType} xlChart = -4109; xlDialogSheet = -4116; xlExcel4IntlMacroSheet = 4; xlExcel4MacroSheet = 3; xlWorksheet = -4167; {XlWBATemplate} xlWBATChart = -4109; xlWBATExcel4IntlMacroSheet = 4; xlWBATExcel4MacroSheet = 3; xlWBATWorksheet = -4167;
{Horizontalalignment} xllev = 1; xlcenter = -4108; xlright = -4152; const mincolumnwidth = 8; // Transfer to Excel minimum width var xl: variant; i, j: integer; begin result: = false; if not assigned (dbgrid.DataSource) then exit; if not assigned (dbgrid.DataSource.DataSet) then exit; if not dbgrid.DataSource.DataSet.active then exit; TRY TRY XL: = CreateOLEObject ( 'Excel.Application'); XL .Visible: = True; XL.Workbooks.Add (xlWBatWorkSheet); XL.ActiveWorkbook.ActiveSheet.Name:=title; with dbgrid do begin dbgrid.DataSource.DataSet.DisableControls; for i: = 0 to Columns.Count-1 do Begin xl.activeworkbook.activesheet.cells [1, i 1] .Value: = columns [i] .title.caption; // Set column width if (not columns [i] .visible) or (Columns [i] .Field = nil) then XL.ActiveWorkbook.ActiveSheet.Columns [i 1] .ColumnWidth: = 0 else if Columns [i] .Width