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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.02.2009, 14:29   #15  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
До кучи

В настоящее время, я в подобных случаях вставляю формулу напрямую в шаблон Excel. Точнее, в шаблоне Excel создается только 2 строки деталировки и строка с итоговой формулой. Непосредственно перед вставкой данных вставляется нужное количество пустых строк как копии первой строки деталировки.

2 строки деталировки нужны для того, чтобы при вставке строк формула с суммой в итоговой строке автоматически меняла адреса ячеек диапазона.

Для копирования строк в классе ComExcelDocument_RU сделал такой метод

X++:
/*
    Вставка указанного количества строк, как копии одной строки шаблона
    _rowTemplate - номер строки, которая будет размножена (скопирована)
    _rowsInsert - количество строк, вставляемых ПОД укаазнной строкой шаблона
    _workSheetId - номер листа Excel в котором это все происходит. Соответственно изменен и метод findRange()
*/
void rtg_insertRowsAsCopy(Row _rowTemplate, Row _rowsInsert, int _workSheetId = 1)
{
    COM     comRowSource;
    Row     currentRow,
            insertedRows;

    MSOfficeBookMark_RU bookMark;
    ;

    #define.xlDown(-4121)

    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);
        comRowSource    = this.findRange(bookMark, _workSheetId);
        comRowSource.copy();
        comRowSource.insert(#xlDown);
    }    // while (currentRow < _rowsInsert)

}
Идея заключается в том, чтобы, по возможности, переложить всю работу по наведению красоты на сам Excel. А из Axapta импортировать только "гладкий" список, не задумываясь о его форматировании и обслуживании.
Теги
excel

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
gl00mie: Read Excel table via ADO Blog bot DAX Blogs 2 09.04.2010 08:32
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Вызов Item() для коллекций Excel Владимир Максимов DAX: Программирование 15 17.08.2006 19:47

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

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

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