Как получить данные из ADODataSet?
Если у вас есть открытый RecordSet (свойство всех наследников TCustomADODataSet), то из него в любую ячейку листа можно получить данные. В примере данные из ADODataSet1 будут вставлены в область, начиная с ячейки A2.
Delphi:
ASheet := (XL.Sheets[1] as _Worksheet); ASheet.Range['A2', EmptyParam].CopyFromRecordset( ADODataSet1.Recordset, EmptyParam, EmptyParam );
C#:
ADODB._Recordset objRS = null; object objRecAff = null; ADODB.Connection objConn = new ADODB.Connection(); // Excel Excel.Worksheet oSheet = null; Excel.Range oRng = null; Excel.Application XL = new Excel.Application(); try { XL.Visible = true; objConn.Open("Provider=\"Microsoft.Jet.OLEDB.4.0\";Data Source=\"" + Environment.GetFolderPath(Environment.SpecialFolder.CommonProgramFiles) + "\\Borland Shared\\Data\\dbdemos.mdb\";Persist Security Info=False;", "", "", 0); objRS = (ADODB._Recordset) objConn.Execute("employee", out objRecAff, (int) ADODB.CommandTypeEnum.adCmdTable); XL.Workbooks.Add(Type.Missing); oSheet = (Excel.Worksheet) XL.ActiveSheet; oRng = oSheet.get_Range("A1", Type.Missing); for (int i = 0; i < objRS.Fields.Count; i++) { oRng.get_Offset(0, i).Value2 = objRS.Fields[i].Name; } oRng = oSheet.get_Range("A2", Type.Missing); oRng.CopyFromRecordset(objRS, Type.Missing, Type.Missing); oRng = oSheet.UsedRange.EntireColumn; oRng.AutoFit(); XL.ActiveWorkbook.Saved = true; } finally { objConn.Close(); objConn = null; objRS = null; objRecAff = null; oRng = null; oSheet = null; XL.UserControl = true; XL = null; }
Т.к. в ADO.NET не существует такого объекта как RecordSet, то в C# приходится подключаться к старому знакомому ADODB (не забудьте добавить в References проекта "Microsoft ActiveX Data Objects 2.8 Library" на вкладке "COM Imports").
How to transfer data to an Excel workbook by using Visual C# 2005 or Visual C# .NET
CopyFromRecordset Method
How To Transfer Data from an ADO Recordset to Excel with Automation
Range.CopyFromRecordset Method