AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.10.2008, 18:43   #1  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
visible(true) для Excel, конечно, в самом конце делаете? Если нет, то сделайте в самом конце.

Еще можно для Excel перед циклом поставить Application.ScreenUpdating(false), а после - Application.ScreenUpdating(true). Даже при visible = false это дает некоторую экономию по времени.
Старый 23.10.2008, 18:51   #2  
Zlojbarsuk is offline
Zlojbarsuk
Участник
 
26 / 12 (1) ++
Регистрация: 08.08.2007
приложение делаю видимым по окончании выгрузки...
Старый 23.10.2008, 19:00   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Поскольку мне неоткуда почитать картинки из таблицы, набросал джоб, выводящий в файл 400 фрагментов экрана (image.captureScreen). Время работы 2-3 секунды.
X++:
static void Job98(Args _args)
{
    ComExcelDocument_RU doc = new ComExcelDocument_RU();
    Image   image = new Image();

    COM     xlApp;
    COM     wbook;
    COM     activeSheet;
    COM     range;
    int     i, timeStart;
    ;

    timeStart = timenow();

    doc.NewFile('',false);
    wbook = doc.getComDocument();

    xlApp = wbook.Parent();
    activeSheet = xlApp.ActiveSheet();

    range = activeSheet.Range('B1');

    xlApp.ScreenUpdating(false);
    for (i=1;i<=400;i++)
    {
        image.captureScreen(0+(i-1)*2, 0+(i-1)*2, 300+(i-1)*2, 100+(i-1)*2);
        image.clipboardCopy();

        range.RowHeight(78);

        //range.Select();
        //activeSheet.Paste();
        range.pasteSpecial(0);

        range = range.Offset(1,0);
    }
    xlApp.ScreenUpdating(true);

    doc.visible(true);

    box::info(strFmt('Всего секунд: %1', timenow()-timeStart));
}
P.S. Удалось избавиться от Range.Select (см.коммент.строки), поэтому теоретически должно быть еще быстрее на какие-то проценты.

Опять в упор не понимаю, что означает конструкция pasteSpecial(0) применительно к Range (не к Worksheet!). Ну, нет там такой подпольной константы! По логике должна быть какая-то -4104 = xlPasteAll, но с ней валится.... А с 0 работает! Во дела... В каких же недокументированных анналах это прописано?

Что-то подобное мы уже обсуждали здесь: Параметры pastespecial()
За это сообщение автора поблагодарили: gl00mie (3), Molchun (1).
Старый 23.10.2008, 19:41   #4  
Zlojbarsuk is offline
Zlojbarsuk
Участник
 
26 / 12 (1) ++
Регистрация: 08.08.2007
Спасибо всем за помощь! :-)
Старый 23.10.2008, 20:13   #5  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Gustav Посмотреть сообщение
Опять в упор не понимаю, что означает конструкция pasteSpecial(0) применительно к Range (не к Worksheet!). Ну, нет там такой подпольной константы! По логике должна быть какая-то -4104 = xlPasteAll, но с ней валится.... А с 0 работает! Во дела... В каких же недокументированных анналах это прописано?
Похоже, дело не в Excel. Успешно работают следующие "пустые" варианты Аксапты:
X++:
range.pasteSpecial( 0                             );
range.pasteSpecial( 01\01\1900                    );
range.pasteSpecial( false                         );
range.pasteSpecial( ''                            );
range.pasteSpecial( 'какая-то фигня непонятная...');
range.pasteSpecial( COMArgument::NoValue          );
range.pasteSpecial( COMVariant::createNoValue()   );
Кто-нибудь может дать объяснение? Классно, что это работает, потому что в этом случае нет необходимости в использовании Range.Select, который всегда замедляет процесс. Но хотелось бы вразумительно вооружиться теорией.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Импорт данных в журнал ГК из Excel Toshk DAX: Функционал 6 23.10.2008 13:46
Excel, группировки: как программно изменить расположение итоговых данных? CDan DAX: Программирование 5 29.08.2008 18:14
Импорт данных из шаблона Excel farlander DAX: Функционал 4 23.11.2006 11:43
Какой способ для связи Axapta с Excel вы предпочитаете? Gustav DAX: База знаний и проекты 37 09.06.2006 09:02

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:06.