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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.05.2012, 14:11   #21  
Cardagant is offline
Cardagant
Участник
 
317 / 54 (2) ++++
Регистрация: 11.10.2011
Цитата:
Сообщение от Gustav Посмотреть сообщение
И осторожный совет - при таких заморочках переходите на нормальный Excel...
Думал перестроить отчёт на основе класса ComExcelDocument_RU, но читал на форуме, что вывод в Эксель на его основе существенно медленее, чем с использованием OWC.

Тогда, судя по всему, придётся сравнить производительность обоих способов и выбрать наиболее подходящий в данном случае. Спасибо Вам, Gustav, за совет.
Старый 12.05.2012, 14:18   #22  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Cardagant Посмотреть сообщение
Думал перестроить отчёт на основе класса ComExcelDocument_RU, но читал на форуме, что вывод в Эксель на его основе существенно медленее, чем с использованием OWC.
Вы подумайте еще немножко и перестройте отчет в соответствии с
Поговорим об ADO и Поговорим об MS Script Control.
За это сообщение автора поблагодарили: serg.epshtein (1).
Старый 12.05.2012, 16:11   #23  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Сделал программное копирование через copy()/paste(). Действительно, после 32766 объединений paste() уже не может скопировать объединенные ячейки. Хотя и ошибок не выдает.

X++:
static void Job_Test(Args _args)
{
    Form                form = new Form();
    Args                args = new Args();
    FormRun             formRun;
    FormActiveXControl  ss;

    COM                 worksheet;
    COM                 range;
    COM                 rangeSource;
    COM                 rangeTarget;
    COM                 cells;
    int                 i;
    int                 maxI;
    int                 timeNowBegin = timeNow();

    SysOperationProgress progress;
    ;

    form.addDesign('Design');
    args.object(form);

    formRun = classFactory.formRunClass(args);
    formRun.init();
    formRun.design().caption('Табличный процессор');

    ss = formRun.design().addControl(FormControlType::ActiveX, 'Spreadsheet');
    //ss.className('{0002E541-0000-0000-C000-000000000046}');     // Microsoft Office Spreadsheet 10.0
    ss.className('{0002E559-0000-0000-C000-000000000046}');   // Microsoft Office Spreadsheet 11.0

    ss.heightMode(FormHeight::ColumnHeight);
    ss.widthMode(FormWidth::ColumnWidth);

    range = ss.Range('A1');
    worksheet = range.Parent();
    cells = worksheet.Cells();

    // Объединение ячеек в первой строке
    range = ss.Range(cells.Item(1,1),cells.Item(1,2));
    range.Merge();
    // Первую строку указываю как источник для последующего копирования
    rangeSource = ss.Range('1:1');
    rangeSource.copy();


#AviFiles
//maxI = 20;
//maxI = 32767;
maxI = 33000;
//maxI = 36409;
//maxI = 37000;
    progress = new SysOperationProgress();
    progress.setAnimation(#aviStopwatch);
    progress.setTotal(maxI);
    progress.setCaption("Проверка объединения");
    progress.setText("Подготовка...");
    progress.update(true);

    for (i=2; i<=maxI; i++)
    {
        progress.setText(strFmt("Осталось %1 из %2", maxI - i + 1, maxI));
        progress.incCount();

        // Копирую в текущую строку "образцовую" строку
        rangeTarget = ss.Range(strFmt('%1:%1',i));
        rangeTarget.paste();

        // Запись значения
//        range = ss.Range(cells.Item(i,1),cells.Item(i,2));
        range = ss.Range('A'+ int2str(i));
        range.Value2(i);
    }

    info("Время выполнения " + time2str(timeNow()-timenowBegin,1,1));
    formRun.run();
    formRun.wait();
}

PS: Где-то в районе 36400 строк OWC съедает всю доступную (ему) память и начинаются дикие торомоза. Так что, думаю, при работе с OWC вообще не стоит использовать такое количество строк. Даже если бы и не было никаких ошибок
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Теги
excel, merge, owc, spreadsheet

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Иморт из Excel 2010. Как правильно закрыть Excel? jkspb DAX: Программирование 4 13.10.2013 00:55
проблема использования Excel через clr Batuev Artem DAX: Программирование 8 22.08.2011 18:01
Sample Design Patterns: Microsoft Dynamics AX - Remedy for slow Microsoft Excel import Blog bot DAX Blogs 0 29.05.2011 17:13
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45

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

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

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