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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.02.2015, 17:36   #1  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Метод Build Pivot Table в ComExcelDocument_RU
Добрый день!
Использую метод buildPivotTable
X++:
#define.xlDatabase(1)
#define.xlPivotTableVersion10(1)
#define.PivotTableName("PivotTable")
void buildPivotTable(BookMark _sourceBookMark, container _columnFields, container _rowFields, container _dataFields,
                    int _sourceWorkSheet = 1, BookMark _destBookMark = "", int _destWorkSheet = 1)
{
    COM         comWorkBook, comWorkSheet;
    COM         comPivotCaches, comPviotCache;
    COM         comPivotTable, comPivotField;
    COM         comCommandBars, comCommandBar;
    int         iPivotField;
    BookMark    destBookMark;
    ;

    comWorkBook = m_comApplication.activeWorkBook();
    comWorkSheet = this.getWorkSheet(_sourceWorkSheet);

    comPivotCaches = comWorkBook.PivotCaches();
    //xlDatabase means data is in the active workbook
    comPviotCache = comPivotCaches.Add(#xlDatabase, strFmt("%1!%2", comWorkSheet.name(), _sourceBookMark));
    //CreatePivotTable(str Destination (ex. [Книга1].Лист2!R3A1), str Data location, int pivotTableVersion)
    //Empty String as destination means a new WorkSheet will be created
    if (_destBookMark)
    {
        comWorkSheet = this.getWorkSheet(_destWorkSheet);
        destBookMark = strFmt("%1!%2", comWorkSheet.name(), _destBookMark);
    }
    comPivotTable = comPviotCache.CreatePivotTable(destBookMark, strFmt("%1%2", #PivotTableName, _sourceWorkSheet), #xlPivotTableVersion10);

    for (iPivotField = 1; iPivotField <= conlen(_columnFields); iPivotField++)
    {
        comPivotField = comPivotTable.PivotFields(conPeek(_columnFields, iPivotField));
        comPivotField.Orientation(2); //xlColumnField
        comPivotField.Position(iPivotField);
    }
    for (iPivotField = 1; iPivotField <= conlen(_rowFields); iPivotField++)
    {
        comPivotField = comPivotTable.PivotFields(conPeek(_rowFields, iPivotField));
        comPivotField.Orientation(1); //xlRowField
        comPivotField.Position(iPivotField);
    }

    for (iPivotField = 1; iPivotField <= conLen(_dataFields); iPivotField++)
    {
        //AddDataField(PivotField object [, shown name, type of aggregate function ])
        //xlSum = -4157 is default
        comPivotTable.AddDataField(comPivotTable.PivotFields(conPeek(_dataFields, iPivotField)));
    }
    //Hide the PivotTable FieldList
    comWorkBook.ShowPivotTableFieldList(false);

    //Hide the PivotTable CommandBar
    comCommandBars = m_comApplication.CommandBars();
    comCommandBar = comCommandBars.item(#PivotTableName);
    comCommandBar.visible(false);
}
Проблема вот в чем - мне надо последнее поле агрегировать как сумма, но сводная строится как количество. Не пойму как это справить?
Старый 06.02.2015, 17:55   #2  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Разобрался! рейндж для построения таблицы был не корректным. А вот еще вопрос! Мне нужен классический вид - как задать чтобы формировалась сразу в класическом виде?
Старый 07.02.2015, 07:02   #3  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
Быть может неправильно понял вас, но в приведенном коде итак не задается формат, а значит "классический" вид
X++:
int         _formatPivotTable = #xlReport6;
;
...
    comPivotTable.Format(_formatPivotTable);        //Формат отчета
    comPivotTable.RowGrand(true);                  //Общая сумма по строкам
    comPivotTable.ColumnGrand(true);               //Общая сумма по столбцам
    comPivotTable.MergeLabels(true);                //Объединять ячейки заголовков
    comPivotTable.PrintTitles(true);                //Печать заголовков
Старый 07.02.2015, 14:10   #4  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Большое спасибо!
Еще вопрос - как скрыть присвоить SubTotal значение false и посоветуйте что то прочитать для наилучшего понимания по работе с Excel через COM
Старый 07.02.2015, 14:23   #5  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
X++:
comPivotField = comPivotTable.PivotFields(conPeek(_rowFields, iPivotField));
comPivotField.Orientation(1); 
comPivotField.Position(iPivotField);
comPivotField.Subtotals(1,false);    //вот так
Насчет почитать не знаю. Считаю самое лучшее если хочется что-то сделать и не знаете как, то запишите макрос и посмотрите как это выглядит на VB, а потом постарайтесь перенести это к себе. Удачи.
Старый 07.02.2015, 14:30   #6  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Работает! Большое спасибо! Просто огромное!
За это сообщение автора поблагодарили: Player1 (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Pivot table IKA DAX: Программирование 1 17.03.2014 12:28
BookDataCalc_Sales_Ru, метод initOnPayment ошибка jonny DAX: Программирование 4 24.04.2011 16:52
Ax2009 RU5: класс CustVendAutoSettlement_Cust_RU, метод description() Damn DAX: Программирование 4 18.12.2010 15:42
emeadaxsupport: Project module Excel pivot table fails with error 0x80070057 E_INVALIDARG Blog bot DAX Blogs 0 10.05.2010 21:05
ComExcelDocument_RU по именнованной ячейки вывести номер ее строки. Poleax DAX: Программирование 37 15.10.2008 14:06

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

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

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