Показать сообщение отдельно
Старый 27.11.2013, 08:31   #1  
Kainix is offline
Kainix
Участник
 
47 / 96 (4) ++++
Регистрация: 22.11.2007
Очередной импорт из Excel
Всем привет. Может уже было, решил поделиться, преобразование range из Excel в контейнер значений. Вставляем в класс ComExcelDocument_RU
X++:
public Container getRangeValue(MSOfficeBookMark_RU _bookMark,int _workSheet = 1)
{
    COM             comWorkSheet, comCells, comRange,
                    comRows,comCols, comItem;

    Container       con, conRow;
    int             startRow, endRow, startCol, 
                    endCol, rowCounter, colCounter;
    ;
    if (! m_comDocument)
        throw error(StrFmt("@DIS100401", this.getApplicationName()));

    comWorkSheet = this.getWorkSheet(_workSheet);

    comCells     = comWorkSheet.cells();
    comRange     = this.findRange(_bookMark, _workSheet);
    comRows      = comRange.Rows();
    startRow     = comRows.row();
    endRow       = startRow + comRows.count() - 1;

    comCols      = comRange.columns();
    startCol     = comCols.column();
    endCol       = startCol + comCols.count() - 1;

    for(rowCounter = startRow; rowCounter <= endRow; rowCounter++)
    {
        conRow = conNull();
        for(colCounter = startRow; colCounter <= endCol; colCounter++)
        {
            comItem = COM::createFromVariant(comCells.item(rowCounter, colCounter));
            conRow += ComExcelDocument_RU::variant2Str(comItem.value());
        }
        con = conpoke(con, conlen(con) + 1, conRow);
    }
    return con;
}
Тестил на 2007 Excel и 2009 Ax
За это сообщение автора поблагодарили: S.Kuskov (3), NickMDAX (1).