Цитата:
Сообщение от
Владимир Максимов
Надо при формировании отчета в 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.