Показать сообщение отдельно
Старый 25.05.2014, 18:34   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,719 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от sashanka Посмотреть сообщение
Насчет вставки строк - я вроде так и делаю
У Вас много лишних "телодвижений" Если очистить код от лишних действий, то должно быть примерно так

X++:
    COM         worksheets,
                sheet,
                rowTemplate,
                newRows;
    int         curSheet;
    int         curRow,
                numRows;


    worksheets  = GridExcel.Worksheets();

    // Сразу создаем нужное количество листов по образцу первого листа
    sheet = worksheets.Item(1);
    sheet.copy( sheet );

    for (curSheet = 1; curSheet <= 2; curSheet++)
    {
        //выделем нужную строчку на шаблоне
        sheet       = worksheets.Item(curSheet);
        curRow      = 9;

        //подсчитываем кол-во необходимых для вставки строк
        select count(recid) from table1;
        numRows = table1.RecId;

        if (!numRows)
        {
            warning('Нет данных для вставки на листе ' + int2str(curSheet));
            continue;
        }
    
        //вставляем строки
        newRows = sheet.Range(strfmt("%1:%2", curRow + 1,NumRows + curRow) ); //вставляем после выделенной строки
        newRows.Insert();

        //копируем нужный формат
        rowTemplate = sheet.Range(strfmt("%1:%2", curRow, curRow) ); //откуда будем копировать форматирование
        rowTemplate.copy( newRows );

    }   // for (curSheet = 1; curSheet <= 2; curSheet++)

PS: Для справки

OWC SpreadSheet имеет предел в 32766 операций. Не важно каких. Например, не в состоянии вставить большее количество строк. У Вас какое значение numRows получается для второго листа?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...

Последний раз редактировалось Владимир Максимов; 25.05.2014 в 18:38.