Понедельник. Сваял джобик. Все три способа прекрасно работают у меня...
Предлагаю призвать заинтересованную общественность прогнать джоб на своих компах и сравнить настройки Виндов, Экселя и т.п.
X++:
#define.xlListSeparator( 5 )
static void TestShowDetail(Args _args)
{
COM xlApp, wbks, wbk, wkss, currSheet;
COM rng, rows, currRows;
int i;
COMVariant dummy = new COMVariant();
COM cmdBars, cmdBar, ctrls, ctrl;
str listSeparator;
COMVariant varListSeparator;
void runExcelMenu(int menuID)
{
cmdBars = xlApp.CommandBars();
cmdBar = cmdBars.Add();
ctrls = cmdBar.Controls();
ctrl = ctrls.Add(1, menuID);
ctrl.Execute();
cmdBar.Delete();
}
;
xlApp = new COM('Excel.Application');
xlApp.Visible(true);
// определение разделителя списка
varListSeparator = xlApp.International(#xlListSeparator);
listSeparator = varListSeparator.bStr();
info( listSeparator );
wbks = xlApp.Workbooks();
wbk = wbks.Add();
wkss = wbk.WorkSheets();
currSheet = wkss.Item(1);
rng = currSheet.Range('A1');
for (i=1; i<= 10; i++)
{
rng.Value2(i);
rng = rng.Offset(1,0);
}
rows = currSheet.Rows();
currRows = COM::createFromVariant(rows.Item('4:7'));
currRows.Select();
currRows.Group();
xlApp.ExecuteExcel4Macro('ALERT("Пауза 1")');
// xlApp.ExecuteExcel4Macro('SHOW.DETAIL(1,7,FALSE)'); //Скрыть детали
xlApp.ExecuteExcel4Macro(strfmt('SHOW.DETAIL(1 %1 7 %1 FALSE)', listSeparator)); //Скрыть детали
xlApp.ExecuteExcel4Macro('ALERT("Пауза 2")');
// xlApp.ExecuteExcel4Macro('SHOW.DETAIL(1,7,TRUE)'); //Отобразить детали
xlApp.ExecuteExcel4Macro(strfmt('SHOW.DETAIL(1 %1 7 %1 TRUE)', listSeparator)); //Отобразить детали
xlApp.ExecuteExcel4Macro('ALERT("Пауза 3")');
cmdBars = xlApp.CommandBars();
cmdBar = cmdBars.Item('PivotTable');
ctrls = cmdBar.Controls();
ctrl = ctrls.Item( 5 );
ctrl.Execute(); //Скрыть детали
xlApp.ExecuteExcel4Macro('ALERT("Пауза 4")');
ctrl = ctrls.Item( 6 );
ctrl.Execute(); //Отобразить детали
xlApp.ExecuteExcel4Macro('ALERT("Пауза 5")');
runExcelMenu( 464 ); //Скрыть детали
xlApp.ExecuteExcel4Macro('ALERT("Пауза 6")');
runExcelMenu( 462 ); //Отобразить детали
}