29.06.2017, 14:22 | #1 |
Участник
|
Передача большой таблицы в 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. Заранее спасибо за помощь. |
|
30.06.2017, 16:11 | #2 |
Участник
|
Попробуйте так
CopyFromRecordset(CellName : Text;VAR ADORecordSet : DotNet "ADODB.RecordsetClass")
__________________
Want to believe... |
|
03.07.2017, 13:07 | #3 |
Участник
|
Так не помогло, та-же ошибка.
|
|
03.07.2017, 17:23 | #4 |
Участник
|
У переменных dot net, мне кажется, нужно поставить RunOnClient = Yes, так как OpenBook открывает книгу через XlHelper который также RunOnClient = Yes. Если свойства разные получается что Excel открыт на клиенте, а рекордсет отрабатывает на сервере приложений.
__________________
Want to believe... |
|
|
За это сообщение автора поблагодарили: Sancho (2), mira (1). |
04.07.2017, 14:57 | #5 |
Участник
|
Спасибо, заработало. Поставил RunOnClient = Yes + по вару передаю в CopyFromRecordset.
|
|
02.08.2017, 03:45 | #6 |
Участник
|
Цитата:
Зачем вот это всё "программирование" нужно было? Вот РЕАЛЬНО быстрее бы отработало напрямую... Чесслово! ЗЫ: А так интересно, конечно. Как метод. ДотНет типа + всякие галочки в параметрах необходимо включать. Круто же!! ЗЗЫ: Я просто онанизм уже (в силу возраста) не очень люблю, поэтому и спрашиваю... Последний раз редактировалось jopagames; 02.08.2017 в 04:10. |
|
02.08.2017, 09:55 | #7 |
NavAx
|
Например, бывает иногда желание сгенерить текст запроса динамически в Наве и дальше результат запихнуть в Эксель. Для тебя, возможно, это онанизм, для кого-то - нормальная такая рабочая ситуация.
__________________
"Моей лошадке ядрышком полмордочки снесло..." А.В.Суворов, письма к дочери |
|
|
За это сообщение автора поблагодарили: palich (1). |
23.08.2017, 23:55 | #8 |
Участник
|
Яш, вот "Например, бывает иногда..." и "нормальная такая рабочая ситуация" - это взаимоисключающие параграфы.
Измыслить, разумеется, в принципе можно что угодно. Про всякие "динамические запросы" (от человека с 7 сообщениями) я тоже готов порассуждать и попредполагать. Спросить например: 1. А вот "необходимо передать большую таблицу" - это сколько точно записей? 2. А зачем вообще это всё надо: тянуть всю таблицу в Эксель? не проще ли её агрегировать средствами SQL, а в Эксель выплюнуть результат? Ну, то есть выяснить, целерон и 3000 записей у человека или фермы, рейды, блейды и действительно большая Фин.Книга? Имеет ли он представление о файловых группах, планах запросов и филлфакторе... или в глаза не видел стандартного (и быстрого!) средства переноса SQL->Excel через .DTSx пакет? И там уже рассуждать про тонкую настройку OLAP, либо давать советы по апргейду процессора и сетевой карты )) |
|
24.08.2017, 15:58 | #9 |
NavAx
|
Серёжа, порассуждать, спросить, выяснить и вот это все никто не запрещает!
А еще никто не запрещает просто ответить на вопрос, который человек задал.
__________________
"Моей лошадке ядрышком полмордочки снесло..." А.В.Суворов, письма к дочери |
|
25.08.2017, 01:05 | #10 |
Участник
|
Цитата:
Ответили человеку просто - он доволен (лайк вон тебе поставил) И ему хорошо. И всем хорошо! Да и мне тож неплохо. Аминь!! ЗЫ: А начнёшь умничать и отвечать "сложно" - останешься без лайка, или вообще забанят. Это я уже в курсе, поэтому ничего и не выясняю. Даже специально уточнил, что только мог бы например спросить "А нахера это всё надо?", но не спрашивал. Последний раз редактировалось jopagames; 25.08.2017 в 01:08. |
|
|
Похожие темы | ||||
Тема | Ответов | |||
german_nav_developer: Export nach Excel : Spalte(n) vermisst? | 0 | |||
Сводные таблицы в Excel | 6 |
|