Показать сообщение отдельно
Старый 22.05.2014, 14:27   #5  
sashanka is offline
sashanka
Участник
 
28 / 10 (1) +
Регистрация: 07.02.2013
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
Кстати, может просто "мусор" остался в буфере обмена после последнего tb.toClipboard()? В смысле, первая команда rows.copy() пытается скрестить "ежа и ужа". Часть буфера от Windows загнанный в tb.toClipboard() и часть буфера от OWC через rows.copy()

Попробуй сначала сделать оба листа и только потом наполнять их данными через tb.toClipboard() + range.paste()

Я бы еще поэкспериментировал с копированием без параметра. Т.е. через буфер обмена.

X++:
        // Выделяю образцовую строку
        bookMark  = int2str(_rowTemplate) + ":" + int2str(_rowTemplate);
        range   = sheet.range(bookMark);
        // Копирую ее содержимое со всеми форматами в буфер обмена
        range.copy();
        // Вставляю из буфера обмена в строку ниже (под выделенной)
        range.insert(#xlDown);
Последовательность действий такова:
  1. подгружаю шаблон xlt
  2. открываю лист шаблон
  3. копирую его
  4. далее начинаю заполнять новый лист данными с помощью TextBuffer
Ошибка появляется даже если 1 лист добавить копированием и попытаться туда что-то записать.

Если вставлять новые строки по одной то время выгрузки увеличивается в разы.

Насчет вставки строк - я вроде так и делаю

X++:
    COM         worksheets,
                sheet,
                newsheet,
                range,
                rows,
                newRows,
                cell;

    TextBuffer  tb;

    Table1      table1;
    Table2      table2;

    int         curRow,
                numRows;

    ;
    //загрузка шаблона
    GridExcel.XMLURL("S:\\testSpreadSheet.xml");

    worksheets  = GridExcel.Worksheets();

    //выделем нужную строчку на шаблоне
    sheet       = worksheets.Item(1);
    range       = sheet.Range("A9:F9");
    curRow      = 9;

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

    if( numRows <= 1 )
    {
        return;
    }

    //вставляем строки
    rows    = sheet.Rows();
    newRows = rows.Item( strfmt("%1:%2", curRow + 1,NumRows + curRow) ); //вставляем после выделенной строки
    newRows.Insert();

    //копируем нужный формат
    newRows = rows.Item( strfmt("%1:%2", curRow + 1,NumRows + curRow) ); //куда будем копировать форматирование
    rows = range.EntireRow(); //откуда будем копировать форматирование
    rows.copy( newRows );