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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.10.2007, 19:49   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от miklenew Посмотреть сообщение
Так вот например шаблон называется primer. Отчёт формирует файл primer1.
Вызываю ещё раз. Ещё primer1. И т.д.
А почему еще раз primer1? Должно быть primer2, primer3 и т.д. Если у вас каждый раз primer1, то значит каждый раз открывается новая сессия Excel, ибо в одном открытом приложении не может быть двух рабочих книг с одинаковыми именами.

Генерите все отчеты в одной сессии Excel. Когда закончите, то можете получить список имен всех этих, еще не сохраненных, книг перебором в цикле for коллекции Workbooks объекта Excel.Application. У каждой Workbook в цикле читаем свойство Name. Запомнить список имен можно в любой подходящий класс-коллекцию Аксапты (Set, Array, List и т.п.).

Далее, имея список имен файлов, можете обратиться к любому из них методом Item, т.е. грубо COM текущаяКнига = Workbooks.Item('<имя из списка>') и дальше с COM текущаяКнига делаете свои желаемые действия, например, "Сохранить Как".

P.S. Свойство Name у рабочей книги - read-only, поэтому единственный способ "изменения" имени - через "Сохранить Как <новое имя>" (естественно, изменение имени сохраненного файла средствами ОС за пределами Excel не рассматриваем )

Какие конкретные изменения нужно внести в COMExcelDocument_RU не знаю, я с ним не работаю. По-моему, он как раз не очень удачно "заточен" именно на работу только с одним документом.

Привожу в качестве примера метод из некоторого своего класса, который управляемо по желанию либо создает новую сессию Excel (newInstance = true), либо стучится в существующую (newInstance = false) . Метод возвращает массив ссылок на объекты, полезные при дальнейшей работе с сессией Excel. Вам будет интересен прежде всего фрагмент между пунктирными линиями:
X++:
static Array getExcelSession(  str        openFileName = ''   ,
                               anytype    workSheet    = 1    ,
                               str        rangeAddress = 'A1' ,
                               boolean    newInstance  = false)
{
    COM xlApplication;
    COM xlWorkbooks, xlWorkbook;
    COM xlWorksheets, xlWorksheet;
    COM xlRange;
    Array comArray = new Array(Types::Class);
    ;

//------------------------------------------------------------------
    xlApplication = COM::getObject('Excel.Application');

    if( !xlApplication || newInstance )
        xlApplication = new COM('Excel.Application');
//------------------------------------------------------------------

    xlWorkbooks = xlApplication.Workbooks();

    if (! openFileName )
        xlWorkbook  = xlWorkbooks.Add();
    else
        xlWorkbook  = xlWorkbooks.Open( openFileName );

    xlWorksheets = xlWorkbook.Worksheets();
    xlWorksheet  = xlWorksheets.Item( workSheet );

    xlRange  = xlWorksheet.Range( rangeAddress );

    comArray.value(1, xlApplication);
    comArray.value(2, xlWorkbooks  );
    comArray.value(3, xlWorkbook   );
    comArray.value(4, xlWorksheets );
    comArray.value(5, xlWorksheet  );
    comArray.value(6, xlRange      );

    return comArray;
}
За это сообщение автора поблагодарили: miklenew (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
mazzy: История имен Blog bot DAX Blogs 9 07.11.2009 09:57
сортировка файлов ZVV DAX: Программирование 12 20.10.2008 19:56
Переход по полям грида с помощью стрелочек на клавиатуре SorNick DAX: Программирование 16 07.10.2008 12:39
названия контролов в отчете. krmik DAX: Программирование 1 06.07.2005 15:54
Отображение названия вместо кода! demID DAX: Программирование 31 05.10.2004 00:03

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

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

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