15.03.2007, 11:13 | #1 |
Участник
|
Сводная таблица из 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). |
15.03.2007, 13:28 | #2 |
Moderator
|
Это, вероятно, потому, что люди, пользующие сводную таблицу, обычно умеют ее строить самостоятельно.
А людей, не умеющих пользовать сводную таблицу, не сильно спасет тот факт, что сводная таблица "явится" к ним из самой(!) Аксапты |
|
15.03.2007, 13:40 | #3 |
Участник
|
Цитата:
Да, хорошее предположение. Наши пользователи, получается, как всегда отличились. |
|
15.03.2007, 15:24 | #4 |
Злыдни
|
Есть еще краше предположение: выгрузить в сводную таблицу "сырые" данные, т.е. без формирования строк в excel можно, но как объяснить пользователю, что при попытке сильно развернуть данные (с уходом за 65 тысяч), Excel его посылает за тридевять земель
__________________
люди...считают, что если техника не ломается, то ее не нужно ремонтировать. Инженеры считают, что если она не ломается, то нуждается в совершенствовании. |
|
15.03.2007, 16:53 | #5 |
Участник
|
А почему не использовать стандартное средство в самой Axapta ? Сначала пусть Axapta обрабатывает куб, после этого можно выгрузить полученную таблицу в Excel (есть такая кнопка на форме вывода)
|
|
20.03.2007, 09:06 | #6 |
Участник
|
Есть еще один простой вариант
Создаете форму кладете туда ActiveX OWC11 к примеру
при определнных условиях задаете объекту CommandText и ConnectionString |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Excel, сводная таблица, проблемы с pivotItem | 2 | |||
Сводная таблица | 10 | |||
Copyof Сводная таблица | 0 | |||
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? | 10 | |||
Введение в Аксапту | 0 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|