Показать сообщение отдельно
Старый 29.06.2017, 14:22   #1  
palich is offline
palich
Участник
 
7 / 10 (1) +
Регистрация: 12.12.2006
Передача большой таблицы в excel
Нужно передать большую таблицу из NAV2015 в excel. Стандартные средства не подойдут т.к. очень долго будет отрабатывать. Поэтому написал следующий код:

Добавил новую функцию в CU 12416 Excel Management

CopyFromRecordset(CellName : Text;ADORecordSet : DotNet "ADODB.RecordsetClass")
XlRange := XlWrkSht.Range(CellName);
XlRange.CopyFromRecordset(ADORecordSet,100,100);

определил локальные переменные:
ADORecordSet DotNet ADODB.RecordsetClass.'ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'


Создал новый отчет или кодеюнит, определил в нем глобальные переменные:
ExcelManagement Codeunit Excel Management
SQLText Text
var_ra Variant
ADOConnectionClass DotNet ADODB.ConnectionClass.'ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
ADORecordSetClass DotNet ADODB.RecordsetClass.'ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'


написал код:

ExcelManagement.OpenBook('C:\TEMP\book1.xlsx');
ExcelManagement.OpenSheet('Sheet1');
SQLText := 'SELECT [G_L Account No_],[Amount] FROM [dbo].[MY COMPANY$G_L Entry]';

ADOConnectionClass := ADOConnectionClass.ConnectionClass();
ADOConnectionClass.Open('Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=MY_DB;Data Source=MY_SERVER', '', '', -1);
ADORecordSetClass := ADORecordSetClass.RecordsetClass();
ADORecordSetClass := ADOConnectionClass.Execute(SQLText, var_ra, -1);

ExcelManagement.CopyFromRecordset('A1',ADORecordSetClass);

ExcelManagement.GiveUserControl();
ExcelManagement.CloseBook();

Возникает ошибка на команде XlRange.CopyFromRecordset(ADORecordSet,100,100):
Cannot serialize an instance of the following .NET Framework object: assembly ADODB, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, type ADODB.RecordsetClass.

Заранее спасибо за помощь.