26.05.2010, 15:36 | #1 |
Участник
|
Запрет на печать и сохранение документов doc, xls.
АХ 3.0 SP 5
Как наложить запрет (выборочно) на печать и сохранение, открываемых документов (doc, xls)? Смотрел как вариант отключение этих опций меню макросами, но как эти макросы привязать к любому файлу? Открытие в АктивХ, нескольких документов привело к проблемам.. В связи с чем вопрос, может кто уже делал подобное?
__________________
PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда. |
|
26.05.2010, 15:40 | #2 |
Moderator
|
Макросы можно вставлять (и запускать) программно в момент создания документов.
Вставка макроса: X++: public void setVBACode(str _code) { COM vbp; COM vbc; COM vbmdl; COM vbcode; ; vbp = comDocument.VBProject(); vbc = vbp.VBComponents(); vbmdl = vbc.Add(1); vbcode = vbmdl.CodeModule(); vbcode.InsertLines(vbcode.CountOfLines() + 1, _code); } X++: void runVBACode(str _name) { comApplication.run(_name); } Последний раз редактировалось Андре; 26.05.2010 в 15:43. |
|
26.05.2010, 15:44 | #3 |
Участник
|
Документ уже создан до меня.. Мне его нужно только открыть, так что бы нельзя было печатать и сохранять.
__________________
PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда. |
|
26.05.2010, 15:45 | #4 |
Moderator
|
Вставляйте макросы и запускайте их в момент открытия документа.
|
|
26.05.2010, 15:51 | #5 |
Moderator
|
Собственно сам текст макроса, который надо вставлять в открываемый документ:
X++: Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True End Sub |
|
26.05.2010, 16:42 | #6 |
Участник
|
По большому счету - это невозможно. Если на экране отображена "картинка" то распечатать ее можно будт очень многими способами. Начиная от PrintScreen и копирования в другой файл и кончая банальной перезаписью с листа.
Максимум что Вы можете сделать - это заблокировать отдельные пункты меню. Но, во-первых, это потребует фактически отключение систем безопасности (разрешение записи и выполнения макросов), а, во-вторых, как было указано ранее, если пользователю очень надо, он найдет способ обойти ограничение |
|
26.05.2010, 16:46 | #7 |
Moderator
|
Не, ну если очень нужно - можно реализовать задачу, которая запускается на AOS-е или пакетном сервере, открывает документ, сохраняет его в JPEG или PDF и добавляет серую надпись поперек листа - DRAFT (чтобы нельзя было распечатать). Полученный PDF возвращается пользователю.
|
|
26.05.2010, 16:58 | #8 |
Участник
|
Серая надпись никак не может воспрепятствовать печати. Ну, разве что это не будет официальным документом. Так и запрет обычно пытаются ввести вовсе не для официальных документов, а для неких отчетов. Только напрочь забывают, что циферки из отчета банально можно переписать на бумажку
|
|
26.05.2010, 17:01 | #9 |
Участник
|
Чето не доганяю чего то..
Есть файл, abs.doc.. Как в него вставить макрос, а потом запустить? Я ведь открываю файл во внешнем приложении WinApi::shellExecute(), так как ActiveX глючит (не хочет работать с несколькими файлами), как получить comDocument?
__________________
PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда. |
|
26.05.2010, 17:04 | #10 |
Moderator
|
Как то так:
X++: ComExcelDocument_Ru doc = new ComExcelDocument_Ru();
;
doc.open(filename);
doc.setVBACode(macro_text); |
|
|
За это сообщение автора поблагодарили: 3oppo (1). |
26.05.2010, 17:11 | #11 |
Участник
|
Цитата:
__________________
PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда. |
|
26.05.2010, 17:24 | #12 |
Moderator
|
PHP код:
Еще можно посмотреть последние версии офиса - не умеют ли они сохранять данные в PDF формате (OpenOffice давно его поддерживает). |
|
26.05.2010, 17:28 | #13 |
Участник
|
Возникает вот такая ошибочка..
Цитата:
Метод "VBProject" в COM-объекте класса "_Workbook" возвратил код ошибки 0x800A03EC (<неизвестно>), который означает: Программный доступ к проекту Visual Basic не является доверенным.
__________________
PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда. |
|
26.05.2010, 17:28 | #14 |
северный Будда
|
Цитата:
Сообщение от Владимир Максимов
Серая надпись никак не может воспрепятствовать печати. Ну, разве что это не будет официальным документом. Так и запрет обычно пытаются ввести вовсе не для официальных документов, а для неких отчетов. Только напрочь забывают, что циферки из отчета банально можно переписать на бумажку
Только в этом случае ИМХО проще новый репорт нарисовать - его заведомо не поправишь и не пересохранишь
__________________
С уважением, Вячеслав |
|
26.05.2010, 17:35 | #15 |
Moderator
|
Цитата:
Как это лечится?
2003: Tools - Macro - Security - Trusted Publishers - Trust Access To VB Project 2007: Excel Options - Trust Center - Trust Center Settings - Macro Settings - Trust Access To VB Project |
|
26.05.2010, 17:43 | #16 |
Участник
|
сенкс
__________________
PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда. |
|
26.05.2010, 17:46 | #17 |
Moderator
|
100% - дело в этом. Проверьте не осталось ли запущенных экземпляров Excel, так как эта настройка разделяется между всеми экземплярами Excel.
|
|
26.05.2010, 17:49 | #18 |
Moderator
|
Вот, кстати, я писал два метода. Один проверяет - установлена ли данная настройка. Второй - устанавливает флаг. Не гарантирую, что будет работать со всеми версиями Excel:
X++: static boolean checkTrustedAccessToVBA() { #winapi container keyValue; int regKey; str keyPath = @"Software\Microsoft\Office\%1\Excel\Security"; ; keyPath = strfmt(keyPath, gm_reportExcelApplication::getExcelVersion()); regKey = WinAPI::regOpenKey(#HKEY_CURRENT_USER, keyPath, #KEY_READ); if(!regKey) return true; keyValue = WinAPI::regGetValue(regKey, 'AccessVBOM'); WinAPI::regCloseKey(regKey); if(conlen(keyValue) != 1) return true; if(conpeek(keyValue, 1) == 1) return true; else return false; X++: static void setTrustedAccessToVBA() { #winapi container keyValue; int regKey; str keyPath = @"Software\Microsoft\Office\%1\Excel\Security"; ; keyPath = strfmt(keyPath, gm_reportExcelApplication::getExcelVersion()); regKey = WinAPI::regOpenKey(#HKEY_CURRENT_USER, keyPath, #KEY_WRITE); if(regKey) { WinAPI::regSetValueEx(regKey, 'AccessVBOM', #REG_DWORD, 1); WinApi::regCloseKey(regKey); } |
|
|
За это сообщение автора поблагодарили: alex55 (1). |
26.05.2010, 18:08 | #19 |
Участник
|
Ооо.. еще раз сенкс..
Но вот только макрос приведенный вами отказывается работать.. Прописывается нормально, но только почему то не отрабатывает?!
__________________
PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда. |
|
26.05.2010, 23:00 | #20 |
SAP
|
А я как то делал отчеты с макроссами, я тогда создавал темплейт и в нем писал макрос для автоматического выравнивания объединенных ячеек. Далее создавал новый документ на основании шаблона, на мой взгляд, это куда проще чем вставлять прямо в коде. Хотя как сказать....
|
|
Теги |
excel, word, печать |
|
Похожие темы | ||||
Тема | Ответов | |||
Печать самих файлов PDF | 9 | |||
Печать (сохранение) отчета в PDF | 41 | |||
Печать документов по Заказам, Закупкам | 8 | |||
Серии документов | 3 | |||
Печать документов от разных юр. лиц из одной компании | 15 |
|