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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.03.2007, 11:13   #1  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Сводная таблица из Axapta
Dynamics AX 3.0 SP3 (1951.3730) RUS, Office 2003

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

Метод добавил в стандартный русский класс ComExcelDocument_RU, старался комментировать, но ничего сложного, ессно, в нем нет.
X++:
//_bookMark can be in Letter or RC format (A6:C10 or R6C1:R10C3)
//_destBookmark - only in RC format, as far as I can tell
//containers hold the string names of all fields - should match those used in the worksheet with actual data
#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);
}
Пример использования:
X++:
static void tutorial_BuildPivotTable(Args _args)
{
    ComExcelDocument_RU excel = new ComExcelDocument_RU();
    ;
    
    excel.newFile();
    excel.insertValue("A1", "Family Name");
    excel.insertValue("B1", "First Name");
    excel.insertValue("C1", "Spendings");
    excel.insertValue("D1", "Earnings");

    excel.insertValue("A2", "Kashperuk");
    excel.insertValue("B2", "Ivan");
    excel.insertValue("C2", 1000);
    excel.insertValue("D2", 1800);

    excel.insertValue("A3", "Zhdanova");
    excel.insertValue("B3", "Valeriia");
    excel.insertValue("C3", 3010);
    excel.insertValue("D3", 3000);

    excel.insertValue("A4", "Kashperuk");
    excel.insertValue("B4", "Tanya");
    excel.insertValue("C4", 4050);
    excel.insertValue("D4", 550);

    excel.buildPivotTable("A1:D4", ["Family Name"], ["First Name"], ["Spendings", "Earnings"]);

    excel.visible(true);
}
За это сообщение автора поблагодарили: LEX (1), MikeR (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Excel, сводная таблица, проблемы с pivotItem bagyr DAX: Программирование 2 16.05.2007 09:27
Сводная таблица xconsul DAX: Функционал 10 31.01.2007 15:26
Copyof Сводная таблица xconsul DAX: Программирование 0 19.05.2004 13:49
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

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