03.08.2010, 14:28 | #1 |
Участник
|
Сводная таблица. Сворачивание
Добрый день. Есть кусок кода, который заполняет сводную таблицу данными. Таблица находится в шаблоне.
X++: doc = new ComExcelDocument_RU() comWorkBook = doc.getWorkBook(); comPivotCaches = comWorkBook.PivotCaches(); comPviotCache = comPivotCaches.item(1); qrStr1 = "select..."; comPviotCache.commandText(qrStr1); comPviotCache.refresh(); doc.finalize(); |
|
03.08.2010, 15:37 | #2 |
Участник
|
т.е. чтобы при открытии отчета, не происходило разворачивание данных
|
|
03.08.2010, 16:17 | #3 |
Moderator
|
Если вам нужен такой эффект, который происходит при установке табличного курсора Excel на заголовок какого-нибудь поля сводной таблицы и последующем щелчке на кнопке "Спрятать детали" из тулбара сводной таблицы, то, наверное, вот это стоит попробовать: Помогите сделать действие в Excel через COM
P.S. Перед выполнением команды меню (464), описанной по ссылке, нужно выделить ячейку Excel, в которой содержится заголовок (метка) сворачиваемого поля. Соответствующая команда VBA, которую надо разложить в X++, может выглядеть примерно так: Код: Worksheets("ВашЛист").PivotTables(1).PivotFields("ВашеСворачиваемоеПоле").LabelRange.Select и далее вызов: RunExcelMenu 464 X++: #CCADO #define.xlExternal(2) #define.xlRowField(1) #define.xlColumnField(2) static void Job233_showUserGroupInExcelPivot_2(Args _args) { UserGroupList userGroupList; UserInfo userInfo; UserGroupInfo userGroupInfo; COM rst, flds, fld; COM xlApp, wbk, pc, ptb, pf; COM rng = SysExcelApplication::construct().workbooks().add().worksheets().itemFromNum(1).range('A1').comObject(); COM cmdBars, cmdBar, ctrls, ctrl; void runExcelMenu(int menuID) { cmdBars = xlApp.CommandBars(); cmdBar = cmdBars.Add(); ctrls = cmdBar.Controls(); ctrl = ctrls.Add(1, menuID); ctrl.Execute(); cmdBar.Delete(); } ; rst = AdoRst::openRecordsetInMemory([ ['UserId' , #adVarChar, 5 ], ['UserName' , #adVarChar, 40 ], ['GroupId' , #adVarChar, 10 ], ['GroupName' , #adVarChar, 40 ]]); flds = rst.Fields(); while select userGroupList join userInfo where userInfo.id == userGroupList.userId join userGroupInfo where userGroupInfo.id == userGroupList.groupId { rst.AddNew(); fld = flds.Item('UserId' ); fld.Value(userGroupList.userId ); fld = flds.Item('UserName' ); fld.Value(userInfo.name ); fld = flds.Item('GroupId' ); fld.Value(userGroupList.groupId); fld = flds.Item('GroupName'); fld.Value(userGroupInfo.name ); rst.Update(); } wbk = rng.Parent(); wbk = wbk.Parent(); // ActiveWorkbook pc = wbk.PivotCaches(); pc = pc.Add(#xlExternal); // PivotCache pc.Recordset(rst); ptb = pc.CreatePivotTable(rng); // PivotTable pf = ptb.PivotFields('GroupId' ); pf.Orientation(#xlRowField ); pf.Position(1); pf.Subtotals(1,false); pf = ptb.PivotFields('UserName' ); pf.Orientation(#xlRowField ); pf.Position(2); pf.Subtotals(1,false); pf = ptb.PivotFields('UserId' ); pf.Orientation(#xlRowField ); pf.Position(3); pf.Subtotals(1,false); pf = ptb.PivotFields('GroupName'); // PivotField ptb.AddDataField(pf, 'Участие пользователей в группах'); pf.Orientation(#xlColumnField); pf.Position(1); pf.Subtotals(1,false); xlApp = rng.Application(); // --- этот блок сворачивает детали pf = ptb.PivotFields('GroupId'); rng = pf.LabelRange(); rng.Select(); runExcelMenu(464); // Hide Detail // --- xlApp.Visible(true); } Последний раз редактировалось Gustav; 03.08.2010 в 17:07. |
|
|
Похожие темы | ||||
Тема | Ответов | |||
Excel, сводная таблица, проблемы с pivotItem | 2 | |||
Сводная таблица из Axapta | 5 | |||
Сводная таблица | 10 | |||
select sum(amount) from временная таблица | 6 | |||
Copyof Сводная таблица | 0 |
|