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 (XLAP); END;
Try xlapp: = createoleObject ('Excel.Application'); Except Screen.cursor: = Crdefault; EXIT;
XLapp.Workbooks.Add; xlapp.sheetsinnewwbook: = 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 the begin screen.cursor: = crdefault;
TDBGRID (args [i] .vobject) .datasource.DataSet.first; for iCount: = 0 to tdbgrid (args [i] .vobject) .COLUMNS.COUNT - 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; tdbgrid (args [i] .vobject) .datasource.DataSet.Next; end; xlapp.visible: = true; end; screen.cursor: = crdefault; end; DBGRID data Import to 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}
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'; ExcelApplication1.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;
Procedure tForm1.button4click (sender: TOBJECT); Begin Excelapplication1.disconnect; 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.a SSTRING; End; INC; target.datasource.dataset.next; end; xlapp.visible: = true; screen.cursor: = crdefault;
// Call Procedure TForm2.SpeedButton5Click (Sender: Tobject); Begin CopyDbdataToExcel (DBGRID1); END; DBGRID Import Excel --- Method 4 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} xlLeft = 1; xlCenter = -4108; xlRight = -4152; const minColumnWidth = 8; // into the minimum width of each column in Excel var XL: variant; i , J: Integer: = false; if not assigned (dbgrid.datasource) THEN EXIT; if not assigned (dbgrid.datasource.dataset). : = 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 beg x xl.activeworkbook.activeesheet.cells [1, i 1] .value: = columns [i] .title. Caption;
// Set the column width IF (Not Column [i] .visible) or (columns [i] .field = nil) THEN XL.Activeworkbook.activesheet.columns [i 1] .ColumnWidth: = 0 else if columns [i ] .Width // Set the column format IF (Column [i] .field <> nil) THEN BEGIN IF Columns [I] .field.DataType = fTString the xl.activeworkbook.activesheet.columns [i 1] .numberformatlocal: = '@ 'else XL.ActiveWorkbook.ActiveSheet.Columns [i 1] .NumberFormatLocal: =' G / common format '; end; end; // with XL.ActiveWorkbook.ActiveSheet.Rows [1] .HorizontalAlignment: = xlCenter; DataSource. DataSet.first; J: = 1; While Not DataSource.DataSet.eof Do Begin J: = J 1; xl.activeworkbook.activesheet.Rows [J] .select; for i: = 0 to columns.count-1 do IF (ColumnS [i] .field <> nil) THEN XL.ActiveWorkbook.Activesheet.cells [J, I 1] .Value: = columns [i] .field.Asstring; Datasource.DataSet.next; end; // While end; // with results: = true; Except results: = false; end; // tryfinally dbgrid.datasource.DataSet.EnableControls; end; // trynd; // dbtoExcel