|
01.09.2005, 18:54 | #1 |
Участник
|
Вот сформировал отчетик в Excel на 4 тысячи строчек и ушло на это минут 15.
Причем основное время занял перенос данных и таблички ExcelBufer в Excel. А нельзя ли киким то образом ускорить этот процесс??. Можно ли обратится к екселю не через Automation а каким либо другим способом?? Может работа через C/ODBC будет быстрее? Подскажите плиз, что делать. |
|
01.09.2005, 19:14 | #2 |
Участник
|
вставьте из буфера обмена диапазон целиком.
для этого подготовьте текст правильно. Так, чтобы он соответствовал раскладке в диапазоне. вы потеряете возможность управлять раскраской и оформлением, зато скорость будет хорошая. |
|
02.09.2005, 09:53 | #3 |
Участник
|
Спасибо mazzy!
Вот только каким образом можно вставить диапазон? Насколько я понимаю нужно сначала выделить область в Excel (это не проблема), а потом присвоить ей МАССИВ значений. Только вот с присваиванием массива у меня что то не получается. Если можно выложите пример где это реализовано или дайте ссылочку на описание этой задачки |
|
02.09.2005, 10:02 | #4 |
Участник
|
1. таблица ExcelBufer должна быть обязательно Temporary
2. скорость вывода сильно зависит от клиента, особенно сильно нужны память и проц. На какой машине вы работаете с репортом, и на какой машине будет работать пользователь? |
|
02.09.2005, 10:19 | #5 |
Участник
|
таблица ExcelBufer темповая.
Машина: пень 2.4 512 оперативы. Но не зависимо от машины ввод "диапазонов" будет происходить на порядок быстрее, вот только как его реализовать!!!??? |
|
02.09.2005, 12:24 | #6 |
Участник
|
Ща быренько накропал репортик, который выводит 4000 строк по 10 колонок в ехель - да, очень медленно через буферную таблицу.
Сделал то же самое через Automation-переменную - вышло <4мин. на Cel2400+512Мб <div class='CALtop'>C/AL</div><div class='CAL'>//Сделал переменные Automation xlApplication, xlWorkBook, xlWorkSheet //Затем CREATE(xlApplication) xlApplication.Workbooks.Add; xlWorkBook.Worksheets.Add; //и понеслась Y(1..4000), x(1..10) xlWorkSheet.Range(X+FORMAT(Y)).Value := Value //в конце xlApplication.Visible(TRUE); xlApplication.UserControl(TRUE);</div> |
|
02.09.2005, 13:32 | #7 |
Участник
|
Цитата:
Сообщение от SVG
Ща быренько накропал репортик, который выводит 4000 строк по 10 колонок в ехель - да, очень медленно через буферную таблицу.
Сделал то же самое через Automation-переменную - вышло <4мин. на Cel2400+512Мб Сейчас же вынужден использовать Excel Buffer и его функции. По сути они делают то же самое, но куда-а-а медленнее... С таймером не засекал, да и база совсем другая , но ощущение "неторопливости" стандартного функционала не покидает меня и поныне. Спасибо SVG за подтверждение моих слов. P.S. Осталось понять, почему почти одни и те же вызовы OLE-методов Excel работают так по-разному. Конечно, причина на стороне Navision. Видимо, много избыточных вызовов + работа с таблицей (естественно, временной) + время на передачу параметров функций в самом C/AL... |
|
02.09.2005, 14:19 | #8 |
Участник
|
Спасибо за помощь.
В общем стало ясно что от работы с Excel Bufer лучше воздержатся. Но вот одного я так и не понял, можно ли как писал mazzy присваивать значения не ячейке а целому диапазону. Я думаю это существенно ускорило бы работу. |
|
02.09.2005, 14:56 | #9 |
Участник
|
Цитата:
Сообщение от Jackal
Спасибо за помощь.
В общем стало ясно что от работы с Excel Bufer лучше воздержатся.
__________________
MBS Certified Master in Navision Developer |
|
02.09.2005, 14:31 | #10 |
Участник
|
Цитата:
Сообщение от mazzy
вставьте из буфера обмена диапазон целиком.
Надо сделать текст, потом загнать его в буфер и буфер вставить в ехель. Если я правильно понял канешна. Но тут есть подставы - 1. с буфером навижн не работает, разве что через OCX 2. сформировать строку чтоб скормить ее ехелю - 3. запихать много текста в буфер - строка в нави не больше 1024 - едва ли на одну строчку хватит, разве что тот самый OCX умеет "приклеивать" к буферу новые значения... так что вперед на автомейшен |
|
02.09.2005, 14:44 | #11 |
Участник
|
Все ясно. Тогда действительно выход один - "Вперед на автомейшн"
|
|
05.09.2005, 12:43 | #12 |
Участник
|
предлагаю через CSV файл.
http://www.mibuso.com/forum/viewtopic.php?...1&highlight=csv работает бестрее всех опробованных мной способов. |
|
05.09.2005, 13:01 | #13 |
Участник
|
Если доработать ExcelBuffer и использовать функцию Excel'а TextToColumns (принадлежит классу Range), то скорость экспорта можно повысить на порядок.
Выгрузка 10000 строк (8 столбцов) занимает около 35 секунд. |
|
14.12.2006, 11:54 | #14 |
Участник
|
Есть какой нибудь пример выгрузки в эксель с использованием TextToColumns, у меня ни че не получается
|
|
14.12.2006, 12:20 | #15 |
Участник
|
Еще вариант существенно ускорить выгрузку отчета в Excel, и ExcelBuffer у дел:
Реактивный Excel |
|
14.12.2006, 13:24 | #16 |
Участник
|
я делал - выгружал во временный текстовый файл все данные а потом разом открывал их в Excel
|
|
14.12.2006, 14:34 | #17 |
Участник
|
Не знаю пробовал-ли кто использовать XSL+XML. Работает просто чудо . Основное время - формирование данных для вывода в XML, а само отображение работает мгновенно. На тысячах не пробовал, а 600 записей выводит на раз. К тому же форматирование вывода можно менять
|
|
15.12.2006, 14:01 | #18 |
Участник
|
Абсолютно верно. Хотел написать, что, в особенности с выходом 2007 офиса, Работать через XML гораздо удобнее. С учетом того, что любое форматирование можно воспроизвести с помощью XML, а также скоростью работы записи напрямую файл и открытия в экселе.
|
|
27.12.2006, 12:53 | #19 |
Участник
|
Отказался от XML потомучто не поддерживает группировку.
Перешел на HTML и всё заработало. Есть спец. кодеюнит. |
|