Связанные таблицы AutoCAD с Excel файлами

Автор Тема: Связанные таблицы AutoCAD с Excel файлами  (Прочитано 13465 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Здравствуйте ! Могу ли я каким-то образом найти все таблицы AutoCAD, связанные с каким-либо файлом Excel ? (вне зависимости от того, связана таблица с диапазоном ячеек Excel или c листом Excel). Не удалось ничего дельного найти в гугле. Какой вообще у VBA есть функционал для работы со связанными таблицами AutoCAD, и есть ли он вообще. Где об этом можно почитать?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Давай пример dwg-файла с такой таблицей и соответствующий Excel-файл.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Вот я себе создал файлы для тестирования

Отмечено как Решение sangvinik128 24-12-2019, 15:48:06

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Какой вообще у VBA есть функционал для работы со связанными таблицами AutoCAD, и есть ли он вообще.
Ты можешь определить, что в чертеже есть связанные таблицы через ThisDrawing.Dictionaries.Item("ACAD_DATALINK") - если такого словаря нет, то нет и связанных таблиц. Это необходимое условие, но недостаточное.
Если же этот словарь есть, ты можешь отобрать все таблицы в чертеже (пройтись по всем блокам ThisDrawing.Blocks и внутри их найти все Table), а затем пройтись по всем ячейкам каждой из таблиц и при помощи метода Table.GetCellState(nRow, nCol)  определить состояние ячейки. Если установлен флаг acCellStateLinked, то есть связь. 
Перепроверил этот метод - он не работает. Так что похоже только ObjectARX/AutoCAD .NET API

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Какой вообще у VBA есть функционал для работы со связанными таблицами AutoCAD, и есть ли он вообще.
Ты можешь определить, что в чертеже есть связанные таблицы через ThisDrawing.Dictionaries.Item("ACAD_DATALINK") - если такого словаря нет, то нет и связанных таблиц. Это необходимое условие, но недостаточное.
Если же этот словарь есть, ты можешь отобрать все таблицы в чертеже (пройтись по всем блокам ThisDrawing.Blocks и внутри их найти все Table), а затем пройтись по всем ячейкам каждой из таблиц и при помощи метода Table.GetCellState(nRow, nCol)  определить состояние ячейки. Если установлен флаг acCellStateLinked, то есть связь. 
Перепроверил этот метод - он не работает. Так что похоже только ObjectARX/AutoCAD .NET API
А почему условие недостаточное ? Ведь мне просто нужно знать, есть ли в чертеже связанные таблицы, если есть, то я его просто закрываю и перехожу к следующему чертежу. Или Вы имеете в виду, что словарь может существовать и без связанных таблиц ?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Или Вы имеете в виду, что словарь может существовать и без связанных таблиц ?
Именно. Таблицы создали, потом удалили. А информация в словаре осталась...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Или Вы имеете в виду, что словарь может существовать и без связанных таблиц ?
Именно. Таблицы создали, потом удалили. А информация в словаре осталась...
Ага, теперь я понял, спасибо Вам

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Или Вы имеете в виду, что словарь может существовать и без связанных таблиц ?
Именно. Таблицы создали, потом удалили. А информация в словаре осталась...
А количество записей в словаре я узнать не могу ?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
А количество записей в словаре я узнать не могу ?
Можешь. Свойство Count.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
А количество записей в словаре я узнать не могу ?
Можешь. Свойство Count.
Получается, если я , допустим, буду проверять кол-во записей в словаре по условию : если в словаре 0 записей, то считаем, что связей нет, а если count>0 , то закрываю файл просто. В этом случае я могу что-то упустить ?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Связанные таблицы AutoCAD с Excel файлами
« Ответ #10 : 20-12-2019, 15:20:08 »
В этом случае я могу что-то упустить ?
Упустить что? Если count > 0, то вполне возможно, что связей нет - таблицы, в которых были связи уже удалены. Но если count == 0, то однозначно связей нет. 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Связанные таблицы AutoCAD с Excel файлами
« Ответ #11 : 27-12-2019, 15:37:17 »
А могу ли я как-то разорвать все существующие связи в чертеже ?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Связанные таблицы AutoCAD с Excel файлами
« Ответ #12 : 27-12-2019, 15:44:47 »
А могу ли я как-то разорвать все существующие связи в чертеже ?
Средствами VBA? Ну можешь попробовать удалить все записи словаря ACAD_DATALINK. Но боюсь, что после этого потребуется проверка (команда _AUDIT) чертежа. Или брось уже VBA. Ты же видишь, что в нём одни ограничения...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Связанные таблицы AutoCAD с Excel файлами
« Ответ #13 : 27-12-2019, 15:58:36 »
А могу ли я как-то разорвать все существующие связи в чертеже ?
Средствами VBA? Ну можешь попробовать удалить все записи словаря ACAD_DATALINK. Но боюсь, что после этого потребуется проверка (команда _AUDIT) чертежа. Или брось уже VBA. Ты же видишь, что в нём одни ограничения...
Не, не получается так, пробовал. А в контексте данной задачи, в чём разница ? Как бы я мог решить эту задачу средствами .NET API ? Т.е., как я понимаю, взаимодействие остаётся тем же самым, на уровне объектной модели, свойств объектов и их методов. У меня руки уже чешутся перейти на C# , но чтобы время не терять на переписывание кода, хочется уже допилить средствами VBA.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13886
  • Карма: 1788
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Связанные таблицы AutoCAD с Excel файлами
« Ответ #14 : 27-12-2019, 15:59:59 »
Не, не получается так, пробовал.
Т.е.? Что происходит?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение