Показать сообщение отдельно
Старый 10.09.2007, 11:34   #15  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Понедельник. Сваял джобик. Все три способа прекрасно работают у меня...
Предлагаю призвать заинтересованную общественность прогнать джоб на своих компах и сравнить настройки Виндов, Экселя и т.п.
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 ); //Отобразить детали
}

Последний раз редактировалось Gustav; 10.09.2007 в 14:39. Причина: добавил определение разделителя списка
За это сообщение автора поблагодарили: kashperuk (10), aidsua (1).