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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.08.2006, 17:12   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Строго говоря, в моем случае, приведенный код решением вообще не является, поскольку предполагает обязательно создание файла Excel на диске еще до его отображения. По ряду причин - это сделать невозможно.

Однако за подсказку посмотреть в реестре спасибо. Как-то забыл о такой очевидной вещи.

Мелкие добавления:

Можно автоматизировать анализ версии Excel. Правда, для этого надо создать экземпляр Excel

PHP код:
    str     strExcelVersion;
    
real    excelVersion;
    ;

    
excel = new Com("Excel.Application");
    
strExcelVersion excel.version();
    print 
strExcelVersion;
    
pause;
    return; 
Удалять этот экземпляр не обязательно. Будет удален автоматически при завершении метода, поскольку ничего внутри себя не открывает (никаких файлов)

В результате и получим "9.0", "10.0" или "11.0". Соответсвенно, можно сделать анализ на необходимость контроля.


Удалить созданный модуль можно командой

PHP код:
comp.remove(module); 
Нет необходимости в дополнительной ссылке через коллекцию module.Collection();
Старый 17.08.2006, 19:09   #2  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Скромно-забавный способ задания свойств
Цитата:
Сообщение от Владимир Максимов
Надо при формировании отчета в Excel добавить в сформированный файл некоторую служебную информацию: кто и когда создал отчет.

В Excel для этого можно воспользоваться пунктом меню: Файл - Свойства - закладка "Прочие"
Если не задаваться целью записать информацию непременно на закладку "Прочие", а ограничиться теми пятью полями на закладке "Документ", которые заполнены на прилагаемом рисунке, то можно воспользоваться до сих пор поддерживаемой в современных версиях Excel возможностью выполнения команд макроязыка версии 4.0.

Код при этом получается до безобразия компактным - всё делается одной командой:
X++:
static void MVB_Excel_DocProperty_5(Args _args)
{
    COMExcelDocument_RU     excel;
    COM     doc;
    COM app;
    
    str s;
    str Title    = 'Наше Название';
    str Subject  = 'Наша ""рогатая"" Тема';
    str Author   = 'Наш Автор (МЫ)';
    str Keywords = 'Наши Ключевые слова';
    str Comments = 'Наши Заметки';
    ;
    
    excel = new ComExcelDocument_RU();
    excel.newFile('',true);
    doc = excel.getComDocument();
    app = doc.Application();
    
    s = strfmt('SUMMARY.INFO?("%1","%2","%3","%4","%5")',
                Title, Subject, Author, Keywords, Comments);
    
    app.ExecuteExcel4Macro(s);
}
Особенностью макрокоманды "SUMMARY.INFO?", как и всех других команд с "?" на конце, является то, что по окончании процедуры пользователю всегда будет предъявлено диалоговое окно, аналогичное изображенному на рисунке (т.е. нельзя просто скрыто прописать эти 5 свойств). Для закрытия окна пользователь может нажать любую кнопку или "крестик" - это без разницы, информация уже все равно сохранена в памяти.

Можно считать эту "назойливость", также как и ограниченность набора пятью полями, платой за компактность кода. Хотя, с другой стороны, не вижу в этом ничего плохого - пользователю может даже понравиться это финальное "одобрение", тем более, что он может добавить информацию и в другие поля (и вот для их сохранения ему уже придется нажать на OK).

Теоретически существует еще команда "SUMMARY.INFO" (без "?"), предназначенная как раз для скрытого прописывания, но она почему-то не производит желаемого эффекта. Не знаю, почему. Возможно, это ограничение метода ExecuteExcel4Macro в свете современной борьбы с макровирусами (в самом Excel 4.0 10 лет назад всё работало хорошо )

Если кто заинтересуется (а там есть кое-что любопытное), то можно скачать: Excel 2000 Help File: Running Excel 4.0 Macros.
Изображения
 
Старый 17.08.2006, 19:47   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Владимир Максимов
Строго говоря, в моем случае, приведенный код решением вообще не является, поскольку предполагает обязательно создание файла Excel на диске еще до его отображения. По ряду причин - это сделать невозможно.
Это создание файла обязательно только в том случае, если мы хотим соблюсти крайнюю "деликатность": у пользователя перед задачей галка была сброшена, и мы хотим по окончании задачи также ее сбросить.

Если же наша цель - только не напрягать пользователя лишним сообщением о необходимости ВКЛЮЧИТЬ эту галку, то всё замечательно. Главное - включить ее перед запуском инстанса Excel, относящегося именно к нашей задаче. Потом - да и фиг с ней, с включенной.

Если же всё же не хочется оставлять пользователя надолго со включенным состоянием по соображениям вирусной безопасности, то галку можно сбрасывать в каком-нибудь пакетном режиме, например, при включении компа или при очередном запуске Аксапты на клиенте - главное, чтобы в этот момент в системе не было ни одной запущенной копий Excel.
Теги
excel

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
Khue Trinh: Alternative Item Blog bot DAX Blogs 0 09.04.2009 16:05
Вызов класса по Menu Item Silphidae DAX: Программирование 9 13.02.2009 02:21
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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