Показать сообщение отдельно
Старый 12.01.2012, 13:47   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,443 / 1781 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Интересно. Видимо второй (и последующие) вызов метода item() натыкается на какой-то мусор, оставшийся после первого вызова. А вызов info() каким-то образом подчищает этот мусор.

В качестве workaround могу предложить позиционироваться на ячейке при помощи метода offset:
X++:
static void checkExcell(Args _args)
{
    FilePath path='';
    container conFilter = ["Файл  (*.xls)", "*.xls"];
    SysExcelApplication exappl;
    SysExcelCells excells;
    SysExcelWorksheets exsheets;
    SysExcelWorksheet exsheet;
    SysExcelCell excell; // fix
    int row;
    real a,b;
    ;

    path = WinAPI::getOpenFileName(0,conFilter,"", "Укажите файл ",'',"");
    if (!path) return;

    exappl = SysExcelApplication::construct();
    exappl.workbooks().open(path);
    exsheets = exappl.workbooks().item(1).worksheets();
    exsheet = exsheets.itemFromNum(1);
    excells = exsheet.cells();
    excell = excells.item(1,1); // fix
    
    for(row = 1;row<3;row++)
    {
        //a = excells.item(row,1).value().double();
        a = excell.offset(row - 1, 0).value().double(); // fix
        
        //info(strfmt('%1',a));                          // строка 1
        
        //b = excells.item(row,2).value().double();
        b = excell.offset(row - 1, 1).value().double(); // fix
        
        info(strfmt('%1',a));                            // строка 2
        info(strfmt('%1',b));
    }

    exappl.quit();
}
За это сообщение автора поблагодарили: Logger (3), Димитрий (1).