All Forums
 Категория Visio
 Форум Вопросы и ответы
 Актуализация линков при открытии документа
Author Previous Topic Topic Next 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 сам залезает, а внешнего доступа к ним не предоставляет.
Go to Top of Page

brace

Russia
358 Posts

Posted - 11/17/2006 :  09:58:04

а чем плоха автоматическая актуализация ???
пограммеры старались упростить жизнь юзеру а вы хотите добавить ему ручных операций -- для чего ???
Go to Top of Page

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.
Никто с такой ошибкой не сталкивался?
Go to Top of Page

brace

Russia
358 Posts

Posted - 11/17/2006 :  14:27:51

посмотри здесь ...

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devref/HTML/DVS_01_Introduction__544.asp
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 11/17/2006 :  22:37:44
Создается впечатление, что Visio не поддерживает работы с объектом при таком типе связывания.
Если я встраиваю лист Excel непосредственно в документ, то из VBA могу не только посмотреть атрибуты OLE объекта (типа .ProgID), но и залезть в сам объект и покопаться в ячейках Excel. Но как только вместо встраивания используется Link, при попытке влезть внутрь объекта получаем exception.
А такие вещи, как тип объекта, ProgID можно посмотреть и при встраивании, и при линке.
Ну, а если мы не можем влезть в объект, то и управлять автоматическим обновлением становится проблематично. В принципе, можно найти позицию в BLOB'е, куда эта информация заносится. (Если сохранить документ в XML виде сначала с автоматическим обновлением, потом с ручным, то сравнивая два текстовых файла, легко можно найти отличия). Но эта информация находится внутри двоичного объекта.
Go to Top of Page

krys

55 Posts

Posted - 07/17/2007 :  18:25:19
Туманову:

Вы случайно не обратили внимание какое значение содержит аттрибут ForeignType?
Я во всех случаях (идет ли речь о встроенном документе или о ссылке на документ) получаю
-32512, хотя должен был бы получать 32768 (visTypeIsOLE2).

P.S.
понимаю, что многовато времени прошло, но
я сейчас снова вернулся к этой проблемке.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 07/17/2007 :  18:54:41
Если вставлять лист в рисунок Visio, то получаю -32256.
Это 8200, что значит visTypeIsOLE2 и visTypeIsEmbedded.
А при линке на файл получается -32512.
Go to Top of Page

krys

55 Posts

Posted - 07/17/2007 :  19:23:28
Понял.
Большое спасибо.
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)