AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.05.2014, 19:06   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Кстати, может просто "мусор" остался в буфере обмена после последнего 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);
У меня для вставки в Excel написан свой метод в классе SysExcelWorksheet. Попробуй его адаптировать под OWC SpreadSheet.

X++:
/*
    Вставка указанного количества строк, как копии одной строки шаблона
    _rowTemplate - номер строки, которая будет размножена (скопирована)
    _rowsInsert - количество строк, вставляемых ПОД указанной строкой шаблона

    При вставке указанным способом "раздвигается" диапазон ячеек для суммирования если вставка выполняется "внутри" диапазона формулы

    Для сохранения суммирования в шаблоне надо делать минимум 2 строки "деталей" (чтобы была возможность указать диапазон в формуле),
    а вставку выполнять после второй строки "деталей", используя эту вторую строку как шаблон
*/
void insertRowsAsCopy(Row _rowTemplate, Row _rowsInsert)
{
    MSOfficeBookMark_RU bookMark;
    SysExcelRange       sysExcelRange;

    Row     currentRow,
            insertedRows;
    ;

    if (_rowsInsert < 2)
    {
        return;
    }

    // Итерационный цикл
    // Вставляю сначала 1, потом 2, 4, 8 и т.п. строк на последнем шаге вставляю остаток строк
    currentRow = 1;
    while (currentRow < _rowsInsert)
    {
        if (currentRow * 2 <= _rowsInsert)
        {
            insertedRows = currentRow;
            currentRow  += insertedRows;
        }
        else
        {
            insertedRows = _rowsInsert - currentRow;
            currentRow   = _rowsInsert;
        }
        bookMark        = int2str(_rowTemplate) + ":" + int2str(_rowTemplate + insertedRows - 1);
        sysExcelRange   = this.range(bookMark);
        sysExcelRange.copy();
        sysExcelRange.insert(#xlDown);
    }   // while (currentRow < _rowsInsert)
/*
        // Прямая вставка указанного количества
        // По времени одинаков с итерационным циклом, но имеет недостатки
        // 1) Нужно физическое наличие необходимого количества пустых строк
        // 2) В качестве "конца листа" (последней использованной ячейки) будет удвоенное количество вставляемых строк
        // т.е. переход по Ctrl+End выбросит далеко за конец информационной части отчета

        // Выделяю нужное количество строк ПОД итоговой строкой
        bookMark        = int2str(_rowTemplate+1)+":"+int2str(_rowTemplate+1+_rowsInsert-1);
        sysExcelRangeSource   = this.range(bookMark);
        sysExcelRangeSource.comObject().cut();

        // Вставляю выделенные строки перед второй строкой
        bookMark            = int2str(_rowTemplate)+":"+int2str(_rowTemplate);
        sysExcelRangeTarget = this.range(bookMark);
        sysExcelRangeTarget.insert(#xlDown);

        // Выделяю образцовую строку
        bookMark            = int2str(_rowTemplate)+":"+int2str(_rowTemplate);
        sysExcelRangeSource = this.range(bookMark);
        // Копирую образцовую строку со всеми формулами во вновь добавленные строки
        bookMark            = int2str(_rowTemplate)+":"+int2str(_rowTemplate+_rowsInsert-1);
        sysExcelRangeTarget = this.range(bookMark);
        sysExcelRangeSource.comObject().copy(sysExcelRangeTarget.comObject());
*/

}
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Теги
errors, spreadsheet

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
palleagermark: Easy reusable method to load postal codes (zipcodes) or how to save a spreadsheet as XML Blog bot DAX Blogs 0 11.10.2013 19:11
palleagermark: XML transformation from Excel spreadsheet Blog bot DAX Blogs 0 22.11.2012 14:11
Медленное копирование данных из Spreadsheet в PivotTable PSerg DAX: Программирование 0 12.08.2009 10:19
SpreadSheet if_maks DAX: База знаний и проекты 8 22.12.2005 12:42
Использование OWC.Spreadsheet для ускорения экспорта/импорта в/из Excel. storer DAX: Программирование 24 28.03.2005 19:10

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:05.