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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.01.2007, 22:41   #11  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2494 (89) +++++++++
Регистрация: 20.08.2005
Вот код загрузки/выгрузки в Excel - 10 колонок * 50 т. строк
X++:
{
    ComExcelDocument_RU excel = new ComExcelDocument_RU();
    Com doc;
    Com app;
    Com sheet;
    Com range;
    COMVariant var;
    ComVariant v, v1;
    Array arr;
    Container c;
    int i, j, k;

    Com SafeArray = new Com ("AxSafeArray.SafeArray");
    int rowCount;
    int colCount;
    int tm = winapi::getTickCount();
    ;

    v = ComVariant::createNoValue();
    v1 = new ComVariant(ComVariantInOut::In, ComVariantType::VT_VARIANT);
    v1.variant(v);
    arr = new Array(Types::Class);
    for (j=1;j<=10;j++)
    {
        for (i=1;i<=50000;i++)
            switch (j mod ((i mod 3)+1))
            {
                case 0:
                    arr.value(i, ComVariant::createFromStr(strfmt("??? %1", i)));
                    break;
                case 1:
                    arr.value(i, ComVariant::createFromInt(i));
                    break;
                case 2:
                    arr.value(i, ComVariant::createFromReal(i));
                    break;
            }
        var = ComVariant::createFromArray(arr);
        k = SafeArray.AddArrayCol(v1, var);
    }

    var = v;

    excel.newFile("", false);
    doc = excel.getComDocument();
    app = doc.Application();
    sheet = app.activeSheet();
    range = sheet.range("A1:J50000");
    c += [strfmt("%1", winapi::getTickCount()-tm)];
    range.value2(var);

    c += [strfmt("%1", winapi::getTickCount()-tm)];

    var = range.value2();
    rowCount = SafeArray.GetArrayRowCount(var);
    colCount = SafeArray.GetArrayColCount(var);
    c += [strfmt("%1", winapi::getTickCount()-tm)];
    for (j=1;j<=colCount;j++)
    {
        v1 = SafeArray.GetArrayCol(var, j);
        arr = v1.safeArray();
        for (i=1;i<=rowCount;i++)
            v = arr.value(i);
    }
    excel.visible(true);
    c += [strfmt("%1", winapi::getTickCount()-tm)];

    for (i=1;i<=conlen(c);i++)
        info(conpeek(c, i));
}
Общее время - 58-60 сек. Время загрузки в Excel 35 сек.

PS М-да. Попробовал на другой машине. Общее время - 38 сек. Время загрузки в Excel 23 сек.

Дохлый у меня комп дома
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 11.01.2007 в 08:32.
Теги
ax3.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Импорт из 'офисной БД' (Excel, Access) Gustav DAX: База знаний и проекты 4 07.06.2008 17:17
Импорт строк PurchLine (через функционал) kaw DAX: Функционал 8 20.03.2008 14:49
Помогите сделать действие в Excel через COM kashperuk DAX: Программирование 25 10.09.2007 15:59
Импорт из Excel через шаблон стандартными средствами аксапты NV DAX: Функционал 5 20.01.2005 12:26
Импорт бюджета из Excel OliaM DAX: Функционал 16 13.01.2005 21:56

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

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

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