Показать сообщение отдельно
Старый 17.08.2006, 19:09   #15  
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.
Изображения