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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.07.2010, 16:27   #1  
AlexeyVS is offline
AlexeyVS
Участник
 
103 / 31 (2) +++
Регистрация: 02.04.2010
Группировка сводной таблицы Excel
Коллеги!
Нужна ваша помощь в освоении Excel.
Ситуация следующая: отчет выгружается в шаблон excel, в шаблоне настроена сводная таблица, необходимо сгруппировать столбцы по полю Дата. Группировака должна быть по Месяцам, Кварталам, Годам.
Для реализации пишу такой код:

X++:
Array periods = new Array(Types::Enum);
...

// группировка данных сводной таблицы
    pivotField = pivotTable.pivotFields('Дата');
    dataRange = pivotField.dataRange();
    range = dataRange.cells();
    range = Com::createFromVariant(range.item(1));

    periods.value(1, false);
    periods.value(2, false);
    periods.value(3, false);
    periods.value(4, false);
    periods.value(5, true);
    periods.value(6, true);
    periods.value(7, true);
    
    varArray = ComVariant::createFromArray(periods);
    
    range.group(
        ComArgument::NoValue,
        ComArgument::NoValue,
        ComArgument::NoValue,
        varArray);
При вызове последнего метода получаем ошибку:
Метод "group" в COM-объекте класса "Range" возвратил код ошибки 0x800A03EC (<неизвестно>), который означает: Метод Group из класса Range завершен неверно.

В описании метода group сказано, что последним параметром может быть булевский массив, который и указывает, по каким периодам будет производится группировка. Подозреваю, что надо как-то по другому передавать этот массив.

Каким образом передать массив в метод?
Старый 28.07.2010, 17:38   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Как-то так попробуйте оформить:
X++:
{
    Array         periods   = new Array(Types::Enum);
    COMVariant    varArray  = new COMVariant(COMVariantInOut::IN_OUT, COMVariantType::VT_SAFEARRAY);
    ;

    periods.value(1, false);
    periods.value(2, false);
    periods.value(3, false);
    periods.value(4, false);
    periods.value(5, true);
    periods.value(6, true);
    periods.value(7, true);

    varArray.safeArray(periods, COMVariantType::VT_VARIANT);

    // и дальше подставляем varArray в Range.Group
Старый 28.07.2010, 18:20   #3  
AlexeyVS is offline
AlexeyVS
Участник
 
103 / 31 (2) +++
Регистрация: 02.04.2010
Не помогло, к сожалению.
Я уже пробовал через ComDispFunction сделать, тоже не помогло. Пишет что первый параметр должен быть ком-вариантом

X++:
groupFunc = new ComDispFunction(range, "Group", ComDispContext::Method);

groupFunc.call(
        ComVariant::createNoValue(),
        ComVariant::createNoValue(),
        ComVariant::createNoValue(),
        varArray);
Старый 29.07.2010, 10:17   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
А что-то у меня сегодня с утра на свежую голову вроде как и получилось, правда, с VT_BOOL'ом:
X++:
static void Job327_TestRangeGroup(Args _args)
{
    Array         periods   = new Array(Types::Enum);
    COMVariant    varArray  = new COMVariant(COMVariantInOut::IN_OUT, COMVariantType::VT_SAFEARRAY);

    ComExcelDocument_RU doc = new ComExcelDocument_RU();
    COM wbk, wkss, wks, rng;
    ;

    doc.newFile(@'C:\TestPivot.xls',true); // тестовый файл прилагается к сообщению

    wbk = doc.getComDocument();
    wkss = wbk.Worksheets();
    wks = wkss.Item('Лист4');
    rng = wks.Range('A4');

    periods.value(1, false);
    periods.value(2, false);
    periods.value(3, false);
    periods.value(4, false);
    periods.value(5, true);
    periods.value(6, true);
    periods.value(7, true);

    //varArray.safeArray(periods, COMVariantType::VT_VARIANT);
    varArray.safeArray(periods, COMVariantType::VT_BOOL);

    rng.Group(ComArgument::NoValue,
              ComArgument::NoValue,
              ComArgument::NoValue,
              varArray);
}
Вложения
Тип файла: xls TestPivot.xls (81.0 Кб, 218 просмотров)

Последний раз редактировалось Gustav; 29.07.2010 в 10:21. Причина: удалил макросы из xls-файла, чтоб не пугали
За это сообщение автора поблагодарили: Player1 (4), AlexeyVS (1).
Старый 29.07.2010, 12:13   #5  
AlexeyVS is offline
AlexeyVS
Участник
 
103 / 31 (2) +++
Регистрация: 02.04.2010
Gustav, гениально! Все работает! Спасибо!
Итак, ключевые моменты для того чтобы заработал код в первом сообщении:

X++:
Array periods = new Array(Types::Enum);
    [B]ComVariant varArray = new COMVariant(COMVariantInOut::IN_OUT, COMVariantType::VT_SAFEARRAY);[/B]
;

//тут выводим данные...

// группировка
pivotField = pivotTable.pivotFields('Дата');
range = pivotField.dataRange();
range = range.cells();
range = Com::createFromVariant(range.item(1));

periods.value(1, false);
periods.value(2, false);
periods.value(3, false);
periods.value(4, false);
periods.value(5, true);
periods.value(6, true);
periods.value(7, true);

[B]varArray.safeArray(periods, ComVariantType::VT_BOOL);[/B]

range.group(
        ComArgument::NoValue,
        ComArgument::NoValue,
        ComArgument::NoValue,
        varArray);
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Выгрузка данных в Excel и их группировка... NetBus DAX: Программирование 8 09.12.2013 11:28
emeadaxsupport: How does the Export to Excel feature work under the hood? Blog bot DAX Blogs 0 07.09.2009 19:05
Группировка временной таблицы Андрей К. DAX: Программирование 3 20.01.2009 08:45
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45

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

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

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