Показать сообщение отдельно
Старый 06.05.2010, 16:39   #43  
Roman N. Krivov is offline
Roman N. Krivov
Участник
 
25 / 11 (1) +
Регистрация: 04.05.2010
Адрес: Мир, Россия, Московская область
Цитата:
Сообщение от Gustav Посмотреть сообщение
И как боретесь? В коде что-то отрабатывает или вручную? На картинке-то у вас вроде нормальный вид объединенных ячеек...
Всё очень просто: у нас таблица начинается в строк 19, следовательно встаем на эту строку, копируем её ADORecordSet.RecordCount() -1 раз и вставляем данные. Т.е.:
X++:
. . .
    wkss    = comDocument.Worksheets();
    wks     = wkss.Item(cvActiveWks);
    rng     = wks.Range(_bookmark); // _bookmark = "19:19"
    this.insertRows(rng.row(), rng.row() + 1, rstAxa.RecordCount() - 1);
    cell    = rng.Offset(0,0);
    cell.CopyFromRecordset(rstAxa);
. . .
X++:
protected void insertRows(int _fromRow,
                          int _toRow,
                          int _numOfCopies)
{
    COM         comRows,
                comWorkSheet,
                comRow, comRowTarget, selection;
    COMVariant  comRowVariant, selVariant;
    ;

    if (! _numOfCopies)
        return;

    if (! comDocument)
        throw error(strFmt("@DIS6401", "Excel.Application"));

    comRow = this.findRange(strFmt("%1:%2", _fromRow, _fromRow));
    comRow.copy();

    comRowTarget = this.findRange(strFmt("%1:%2", _toRow, _toRow + _numOfCopies - 1));
    comRowTarget.select();
    comRowTarget.insert(/*#xlShiftDown*/);

    comWorkSheet  = this.getWorkSheet(cvActiveWks);
    comRows = comWorkSheet.cells();
    comRows = COM::createFromVariant(comRows.item(1));
    comRows.select();
    comExcelApplication.cutCopyMode(false);
}
При этом сохраняется объединение ячеек. Но вот проблема с форматированием остаётся.