Author |
Topic |
|
krys
55 Posts |
Posted - 11/15/2006 : 13:13:49
|
Я Вставляю в Visio Документ Ole-обьект который имеет связь с Excel-Документом.
При следующем открытии Документа, Visio выполняет актуализацию Связей, если Excel Документ отсутствует, то появляется окно с сообщением что линк не найден. Можно ли програмно перехватить событие когда стартует актуализация связей? Если нет, можно ли перехватить событие при котором появляется окно сообщения? И как можно програмно указать что актуализация связей должна выполнятся мануально? |
|
Tumanov
Russia
1198 Posts |
Posted - 11/16/2006 : 20:16:56
|
Ни старт актуализации, ни событие после которого появляется сообщение средствами Visio не перехватываются. Все это происходит где-то во время открытия документа. Программно перевести документ на ручную актуализацию, похоже, тоже нельзя. В объектной модели Visio вообще информация о способе актуализации отсутстует. Но в документе она сохраняется. Причем сохраняется даже не в видимых атрибутах объекта Foreign Data, а где-то внутри него. Возможно в нем есть какие-то внутренние переменные, в которые Visio сам залезает, а внешнего доступа к ним не предоставляет. |
|
|
brace
Russia
358 Posts |
Posted - 11/17/2006 : 09:58:04
|
а чем плоха автоматическая актуализация ??? пограммеры старались упростить жизнь юзеру а вы хотите добавить ему ручных операций -- для чего ??? |
|
|
krys
55 Posts |
Posted - 11/17/2006 : 12:49:35
|
Brace: Что бы предотвратить сообщение о том что excel документ не найден. Имеет место ситуация, когда документы открываются в невидимом режиме(программа извлекает из документов необходимую ей информацию). В данном случае мне информация о линках без надобности, а случай когда excel документы сохранненые в ссылке не найдены встречается.
Tumanov: ...то есть вы хотите сказать что даже после открытия Документа я программно не могу отключить автоматическое обновление в опциях, что бы при последующих открытиях избежать обновлений ссылок? Может это можно как-то сделать из Обьекта который сохранен в OLEObject (в моём случае это Excel.Sheet.8)?
Кстати столкнулся с проблемой, что при вызове функции OLEObject.Objekt (Shape.Objekt), программа выбрасывает exception.(Функция OLEObject.ProgID к примеру работает корректно) Причем я вызывал функцию и из VC++ и написав Макрос в VB. Никто с такой ошибкой не сталкивался? |
|
|
brace
Russia
358 Posts |
|
Tumanov
Russia
1198 Posts |
Posted - 11/17/2006 : 22:37:44
|
Создается впечатление, что Visio не поддерживает работы с объектом при таком типе связывания. Если я встраиваю лист Excel непосредственно в документ, то из VBA могу не только посмотреть атрибуты OLE объекта (типа .ProgID), но и залезть в сам объект и покопаться в ячейках Excel. Но как только вместо встраивания используется Link, при попытке влезть внутрь объекта получаем exception. А такие вещи, как тип объекта, ProgID можно посмотреть и при встраивании, и при линке. Ну, а если мы не можем влезть в объект, то и управлять автоматическим обновлением становится проблематично. В принципе, можно найти позицию в BLOB'е, куда эта информация заносится. (Если сохранить документ в XML виде сначала с автоматическим обновлением, потом с ручным, то сравнивая два текстовых файла, легко можно найти отличия). Но эта информация находится внутри двоичного объекта. |
|
|
krys
55 Posts |
Posted - 07/17/2007 : 18:25:19
|
Туманову:
Вы случайно не обратили внимание какое значение содержит аттрибут ForeignType? Я во всех случаях (идет ли речь о встроенном документе или о ссылке на документ) получаю -32512, хотя должен был бы получать 32768 (visTypeIsOLE2).
P.S. понимаю, что многовато времени прошло, но я сейчас снова вернулся к этой проблемке.
|
|
|
Tumanov
Russia
1198 Posts |
Posted - 07/17/2007 : 18:54:41
|
Если вставлять лист в рисунок Visio, то получаю -32256. Это 8200, что значит visTypeIsOLE2 и visTypeIsEmbedded. А при линке на файл получается -32512. |
|
|
krys
55 Posts |
Posted - 07/17/2007 : 19:23:28
|
Понял. Большое спасибо. |
|
|
|
Topic |
|