Показать сообщение отдельно
Старый 06.05.2010, 14:54   #41  
Roman N. Krivov is offline
Roman N. Krivov
Участник
 
25 / 11 (1) +
Регистрация: 04.05.2010
Адрес: Мир, Россия, Московская область
Цитата:
Сообщение от Gustav Посмотреть сообщение
Роман, у меня два вопроса:
  1. Рекордсет создаете с учетом всех колонок, попадающих в область бланка? Т.е. у вас должно быть много фиктивных и немного содержательных - т.е. получается 16 содержательных где-то из 85 всего.
  2. Как вставляете новые строки? Сразу всё необходимое кол-во перед исходной 19-й строкой? Потом дополнительно еще формат этой исходной распространяете на добавленные?
  1. Рекордсет имеет поля под все столбцы, т.е. 16 значемых и 69 "резервных"
  2. Строки добавляются скопом с помощью следующей функции:
    X++:
    protected void insertRows(int _fromRow,
                    int _toRow,
                    int _fromWorkSheet = 1,
                    int _offset        = 1,
                    int _numOfCopies   = 1,
                    int _toWorkSheet   = 1)
    {
        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, _toRow));
        comRow.copy();
    
        comRowTarget = this.findRange(strFmt("%1:%2", _toRow+ _offset, _toRow+ _offset + _numOfCopies - 1));
        comRowTarget.select();
        comRowTarget.insert();
    
        comWorkSheet  = this.getWorkSheet(_toWorkSheet);
        comRows = comWorkSheet.cells();
        comRows = COM::createFromVariant(comRows.item(1));
        comRows.select();
        comExcelApplication.cutCopyMode(false);
    }
При копировании строк нарушается формат ячеек. Самое интересное, он нарушается только при копировании с помощью COM, так как написав тоже самое в VBA всё отлично

Последний раз редактировалось Roman N. Krivov; 06.05.2010 в 15:34.