Welcome ${RESELLERNAME} Customers
Please opt-in to receive reseller support
I agree that Autodesk may share my name and email address with ${RESELLERNAME} so that ${RESELLERNAME} may provide installation support and send me marketing communications. I understand that the Reseller will be the party responsible for how this data will be used and managed.
Email Address
Email is required
Entered email is invalid.
Связь таблиц Autocad и Excel
офис 2016, 64 бит. тоже лицензия. собственно все лицензия, ПК рабочий, все работало до переустановки Акада
если к утру не решу вопрос в 10-00 буду просить сисадмина переустанавливать офис. может так поможет))) если нет, боюсь всю винду под снос(((((((( и снова сутки на отладку ПК
Акад 2017 64 бит.
до переустановки акада все работало (акад переустановить пришлось, т.к. с лиспами стала проблема после экспериментов)
Сейчас из диспетчера ссылок можно открыть файл екселя существующей связи, но новую добавить либо отредактировать существующую — не возможно (еррор как в предыдущем посте)
9 ч. ——
как и говорил, если вопрос не решится — буду просить админа переустановить офис
переустановили и все заработало на «УРА!».
получается болезнь была в том что после удаления АКАДА почистили реестр ручками (все-все-все что связано с Адеском удалили).
Поставили заново АКад и отвалился даталинк.
Переустановили офис
И теперь все работает. Лечение так себе, но в случае отсутствия иного — 20 минут на переустановку — все же меньше чем сутки на поиски штатного решения
AutoCAD: Связь с внешними данными
Часто пользователи хотят связать объекты чертежа с внешними данными – Таблицей Excel, базой данных или просто с текстовым или xml файлом. Конечно, в AutoCAD существует множество способов взаимодействия с внешними данными: _DataLink, dbConnect, attin, _script. Но все эти инструменты требуют «много кликов» и не обеспечивают нужного взаимодействия. Пользователю хочется, что бы объекты чертежа автоматически приводились в соответствие с внешними данными, с минимальным его участием. Образцовым примером подобного взаимодействия является FDO в AutoCAD Map 3D – когда после подключения к источнику мы сразу получаем его содержание в виде графики (и при желании даже с подписями) и для синхронизации с источником, достаточно выполнить обновление слоя (одна команда). Но это специальный (а значит ограниченный) ГИС инструмент, который подойдет не всем. И тогда остаётся лишь применить программирование, благо существует огромное количество способов это сделать – Lisp, C++, .Net, Delphi, Python и т. д.
Одним из способов, установить такую связь с источником данных – создать класс, который будет отвечать за связь с данными или просто агрегировать эти данные для импорта/экспорта. В данной статье я покажу пример подобного класса, который:
- Сам себя рисует (но не Custom object*)
- Имеет собственные данные и следит за их актуальностью
- Умеет импортировать/экспортировать себя в XML
В AutoCAD’е у программиста есть несколько инструментов для хранения собственных данных в чертеже, это – XData и XRecord. Но это весьма ограниченные инструменты и доступ к этим данным имеется только из AutoCAD. Поэтому мы будем использовать внешний источник данных, а связывать их с примитивами в чертеже, через Handle.
Наш объект будет рисовать круг, а также текстовую метку содержащую радиус этого круга, но данный метод позволяет создавать любые примитивы (на пример Solid3d или NurbSurface) – лишь бы у них был Handle. Нам понадобятся методы для отрисовки Объекта и Метки. Но самое главное нам понадобится метод для отслеживания изменения объекта, обработчик события, который мы повесим на событие Modified. Также нам понадобятся методы для обновления примитивов и экспорта в XML. Ну хватит, меньше слов — больше кода.
Не забыли подключить cmgd.dll, acdbmgd.dll, accoremgd.dll (AcAd >= 2013)?
Собственные данные объекта, да это свойства примитива, но это же пример.
Ссылки на примитивы чертежа.
Рисуем сам объект, а заодно запоминаем ссылку на примитив и главное — вешаем обработчик на изменение объекта.
Обрабатываем изменение объекта — получаем новые знаения свойств объекта, обнавляем Метку.
Рисуем Метку объекта.
Импорт/экспорт в XML.
Ну конечно, нам понадобятся команды в AutoCAD’е, для работы с нашим классом.
Правильный вызов Excel из AutoCAD, чтобы дальше можно было работать с Excel
В своих программах я использую следующий вызов Excel из AutoCAD:
Далее можно работать в Excel сколько угодно, а потом когда надо закрыть файл Excel и запустить другой файл происходит следующее:
1) Закрываем Excel при этом процесс Excel остаётся активным в диспетчере задач, а сам Exel при этом уже закрыт. Спрашивается: почему остался работающим процесс, когда программа уже закрылась? Может надо чтобы команду закрытия процесса дал AutoCAD, потому что Excel запускался из AutoCAD? Как это сделать? Или надо специальным образом запускать Excel чтобы следить за тем когда он закрывается?
2) Если попытаться открыть другой файл Excel то Excel работает без отображения ячеек. На экране видны только команды меню и панели инструментов. Ячеек не видно, вместо них чертёж AutoCAD или окно другой работающей программы. Доступа к ячейкам нет. Ясно, что с таким Excelем работать нельзя, неопытных пользователей это просто приводит в ужас! Появляются претензии, что я своим макросом испортил настройки в компьютере и Excel перестал правильно работать! Конечно, чтобы справиться с этой проблемой надо закрыть Excel, открыть диспетчер задач, найти там всё ещё работающий процесс Excel и остановить его. После этого можно запускать снова Excel и никаких проблем не будет. Но разьве объяснишь это обычным пользователям, для обычных пользователей это просто дико слушать и в итоге программа никому не нравится. Спрашивается зачем было делать эту ложку дёгтя в бочка мёда работы Excel из AutoCAD? Как надо правильно запускать Excel из AutoCAD, чтобы он правильно закрывался и нормально потом запускался снова и не было претензий от других пользователей программы?
#2 Ответ от Миша 6 июня 2006г. 03:14:03
- На форуме с 31 декабря 2001г.
- Сообщений: 322
- Спасибо: 0
Re: Правильный вызов Excel из AutoCAD, чтобы дальше можно было работать с Excel
Замечено, что если после закрытия Excel в п.1 закрыть AutoCAD лишний процесс Excel в диспетечере задач тоже останавливается. Может есть специальный метод который может остановить этот процесс без закрытия AutoCAD?
И ещё вопрос: Правильно ли я сделал что отключил вызов функции
так как и без этой функции процесс Excel запускается в диспетчере задач? У меня программа и так работает. По логике, чтобы остановить процесс Excel надо запустить функцию противоположную функции «SendMessage», только что это за функция и как организовать запуск этой функции, чтобы она всегда была на готове и ждала когда закроется Excel? По моему это очень сложно и невозможно. Как вы думаете нет решения этой проблемы?
Очевидно, что работать с таблицами удобнее в Excel, а вот оформление (основная надпись — штамп и рамка) лучше делать в AutoCAD. Сегодня расскажу, как вставить таблицу Excel в AutoCAD, как связать эти два файла так, чтобы при изменении данных в Excel, в AutoCAD автоматически всё обновлялось. А главное, покажу настройки, с которыми AutoCAD не тормозит при обновлении данных.
Чтобы информация была максимально полезной и понятной, буду делать на примере спецификации. Аналогичным образом можно сделать связь для кабельного журнала.
Шаг 1. Заполняем таблицу в Excel
Для начала скачайте файлы шаблонов спецификации по ГОСТ и заполните таблицу в Excel. Тут всё как обычно, но есть один очень важный момент: в первом столбике Поз. не должно быть пустых ячеек. Иначе дальше не сработает.
Спецификация в Excel
Шаг 2. Умные формулы в Excel
Далее на ленте Excel переходим на вкладку Формулы и нажимаем кнопку Диспетчер имён.
Кнопка Диспетчер имён на ленте Excel
Появится окошко. Там уже всё настроено, просто проверьте, что ничего не сломалось. Заодно я объясню, как это работает. Если будете работать со своими таблицами, сможете сделать аналогично.
Header — это диапазон «шапки» нашей таблицы. Там должна быть такая формула:
=Спецификация!$A$1:$D$1
Спецификация — название листа. $A$1:$D$1 — диапазон данных на листе (шапка таблицы).
Окно диспетчер имён в Excel. Формула для диапазона Header
Data — это диапазон данных, который формируется автоматически.
Там должна быть такая формула:
=СМЕЩ(Спецификация!$A$2;0;0;СЧЁТЗ(Спецификация!$A:$A)+1;9)
Окно диспетчер имён в Excel. Формула для диапазона Data
В этой формуле одна функция вложена в другую.
Функция СЧЁТЗ подсчитывает число непустых ячеек в диапазоне (в нашем случае столбик «А»). Как только обнаружится пустая ячейка в столбике «А», то формула считает её концом таблицы. Именно поэтому выше акцентировал внимание на том, что в столбике А не должно быть пропусков ячеек.
Функция СМЕЩ возвращает ссылку на диапазон, смещённый относительно указанной ячейки (диапазона ячеек) на нужное число строк и столбцов. У неё пять аргументов:
- Ссылка — ячейка, от которой нужно отсчитывать. Берём верхнюю левую ячейку с данными таблицы. В нашем случае это ячейка «А2» на листе «Спецификация».
- Смещ_по_строкам. Мы будем отсчитывать от ячейки А2. Поэтому в формуле 0.
- Смещ_по_столбцам. Мы будем отсчитывать от ячейки А2. Поэтому в формуле 0.
- Высота — высота в строках результирующего диапазона (т.е. нашей таблицы). Сюда вставляем формулу СЧЁТЗ, прибавляя ещё единицу. Таким образом, у нас в конце спецификации будут ещё две пустых ячейки, т.к. СЧЁТЗ посчитала ещё и первую строчку — шапку таблицы.
- Ширина — ширина в столбиках результирующего диапазона (т.е. нашей таблицы). Указываем 9, т.к. в нашей спецификации фиксированная ширина — 9 столбиков.
Когда в спецификацию будут добавлены новые строки, то диапазон данных автоматически расширится, т.к. функция СЧЁТЗ посчитает число заполненных ячеек в первом столбике листа и автоматически расширит таблицу. Когда лишние строки из таблицы будут удалены, диапазон данных автоматически уменьшится. В итоге, для передачи в AutoCAD у нас всегда будет таблица необходимого размера.
Кстати, если в каком-то другом случае ширина таблицы тоже может меняться, то в аргумент Ширина прописываем аналогичную формулу СЧЁТЗ, только указывая подсчёт по первой строке: $1:$1.
Шаг 3. Настройка в AutoCAD
Открываем шаблон спецификации в AutoCAD с пустой таблицей.
3.1. Настройка связи для шапки таблицы
Выделяем ячейки шапки таблицы (надо выделить всю строку заголовков). Появляется панель с кнопками редактирования таблицы.
Спецификация в AutoCAD. Настройка связи с Excel. Заголовок таблицы
Нажимаем кнопку «Связь ячейки…» — она вторая справа. Появляется окошко «Выбор связи с данными».
Окно создания связи AutoCAD и Excel
Нажимаем «Создайте новую связь с данными Excel» и вводим название новой связи — Header. Появляется окно настройки связи с данными Excel.
Выбираем наш Excel-файл cо спецификацией. И устанавливаем ниже «Относительный путь». В параметрах связи выбираем из списка нужный лист (в нашем случае единственный лист «Спецификация»), устанавливаем переключатель в положение «Связь с именованным диапазоном» и выбираем из списка диапазон «Header».
Настройка в AutoCAD новой связи с данными в Excel. Настройка диапазона данных
Дальше в правом нижнем углу этого окошка нажимаем на кнопку со стрелкой, чтобы появились настройки форматирования и вносим некоторые изменения:
- В блоке «Содержимое ячеек» устанавливаем переключатель в положение «Сохранить форматы данных, вычислить формулы в Excel».
- Флажок «Разрешить запись в исходный файл» снимаем. Так получится односторонняя связь — изменения вносим только в Excel, а в AutoCAD будет редактирование будет недоступно.
- В блоке «Форматирование ячеек» флажок «Использование форматирования Excel» отключаем, переключатели ниже должны быть неактивны.
Должно получиться как на картинке.
Настройка в AutoCAD новой связи с данными в Excel. Настройка форматирования
Нажимаем кнопку «Ок». Связь для шапки таблицы настроена.
3.2. Настройка связи для данных таблицы
Устанавливаем курсор на первую пустую ячейку в первом столбике, сразу под «шапкой» таблицы.
Спецификация в AutoCAD. Настройка связи с Excel. Данные таблицы
Далее действуем аналогично настройке связи для заголовка таблицы. Нажимаем кнопку «Связь ячейки…». Создаём новую связь с именем Data, выполняя аналогичные настройки, только выбираем именованный диапазон Data. Настройки форматирования делаем точно такие же, как для заголовка.
Нажимаем Ок. Связь с данными установлена. AutoCAD сразу же загрузит данные из таблицы Excel в таблицу AutoCAD. Остаётся удалить лишние строки, которые были в таблице шаблона. При этом строки, которые охватывает связь с Excel, удалить не получится.
Заполненная спецификация в AutoCAD после настройки связи с Excel
Опытным путём было установлено, что данные настройки форматирования — оптимальные в плане производительности, когда AutoCAD обновляет связанные данные. При других настройках обновление происходило очень долго, а при таких занимает минимальное время.
Шаг 4. Обновление данных
При изменении данных в таблице Excel, сразу после сохранения файла, в AutoCAD в правом нижнем углу появится уведомление.
Уведомление в AutoCAD об изменении данных в связанной таблице Excel
Для импорта обновлённых данных из таблицы Excel в AutoCAD просто нажмите на синюю ссылку в уведомлении. AutoCAD импортирует и перезапишет изменённые данные в связанной таблице.
Подпишитесь и получайте уведомления о новых статьях на e-mail
Содержание
- Невозможно создать связь с данными так как программа excel не найдена
- Связь таблиц Autocad и Excel
- AutoCAD: Связь с внешними данными
- Правильный вызов Excel из AutoCAD, чтобы дальше можно было работать с Excel
- #2 Ответ от Миша 6 июня 2006г. 03:14:03
Невозможно создать связь с данными так как программа excel не найдена
Связь таблиц Autocad и Excel
офис 2016, 64 бит. тоже лицензия. собственно все лицензия, ПК рабочий, все работало до переустановки Акада
если к утру не решу вопрос в 10-00 буду просить сисадмина переустанавливать офис. может так поможет))) если нет, боюсь всю винду под снос(((((((( и снова сутки на отладку ПК
Акад 2017 64 бит.
до переустановки акада все работало (акад переустановить пришлось, т.к. с лиспами стала проблема после экспериментов)
Сейчас из диспетчера ссылок можно открыть файл екселя существующей связи, но новую добавить либо отредактировать существующую — не возможно (еррор как в предыдущем посте)
9 ч. ——
как и говорил, если вопрос не решится — буду просить админа переустановить офис
переустановили и все заработало на «УРА!».
получается болезнь была в том что после удаления АКАДА почистили реестр ручками (все-все-все что связано с Адеском удалили).
Поставили заново АКад и отвалился даталинк.
Переустановили офис
И теперь все работает. Лечение так себе, но в случае отсутствия иного — 20 минут на переустановку — все же меньше чем сутки на поиски штатного решения
AutoCAD: Связь с внешними данными
Часто пользователи хотят связать объекты чертежа с внешними данными – Таблицей Excel, базой данных или просто с текстовым или xml файлом. Конечно, в AutoCAD существует множество способов взаимодействия с внешними данными: _DataLink, dbConnect, attin, _script. Но все эти инструменты требуют «много кликов» и не обеспечивают нужного взаимодействия. Пользователю хочется, что бы объекты чертежа автоматически приводились в соответствие с внешними данными, с минимальным его участием. Образцовым примером подобного взаимодействия является FDO в AutoCAD Map 3D – когда после подключения к источнику мы сразу получаем его содержание в виде графики (и при желании даже с подписями) и для синхронизации с источником, достаточно выполнить обновление слоя (одна команда). Но это специальный (а значит ограниченный) ГИС инструмент, который подойдет не всем. И тогда остаётся лишь применить программирование, благо существует огромное количество способов это сделать – Lisp, C++, .Net, Delphi, Python и т. д.
Одним из способов, установить такую связь с источником данных – создать класс, который будет отвечать за связь с данными или просто агрегировать эти данные для импорта/экспорта. В данной статье я покажу пример подобного класса, который:
- Сам себя рисует (но не Custom object*)
- Имеет собственные данные и следит за их актуальностью
- Умеет импортировать/экспортировать себя в XML
В AutoCAD’е у программиста есть несколько инструментов для хранения собственных данных в чертеже, это – XData и XRecord. Но это весьма ограниченные инструменты и доступ к этим данным имеется только из AutoCAD. Поэтому мы будем использовать внешний источник данных, а связывать их с примитивами в чертеже, через Handle.
Наш объект будет рисовать круг, а также текстовую метку содержащую радиус этого круга, но данный метод позволяет создавать любые примитивы (на пример Solid3d или NurbSurface) – лишь бы у них был Handle. Нам понадобятся методы для отрисовки Объекта и Метки. Но самое главное нам понадобится метод для отслеживания изменения объекта, обработчик события, который мы повесим на событие Modified. Также нам понадобятся методы для обновления примитивов и экспорта в XML. Ну хватит, меньше слов — больше кода.
Не забыли подключить cmgd.dll, acdbmgd.dll, accoremgd.dll (AcAd >= 2013)?
Собственные данные объекта, да это свойства примитива, но это же пример.
Ссылки на примитивы чертежа.
Рисуем сам объект, а заодно запоминаем ссылку на примитив и главное — вешаем обработчик на изменение объекта.
Обрабатываем изменение объекта — получаем новые знаения свойств объекта, обнавляем Метку.
Рисуем Метку объекта.
Импорт/экспорт в XML.
Ну конечно, нам понадобятся команды в AutoCAD’е, для работы с нашим классом.
Правильный вызов Excel из AutoCAD, чтобы дальше можно было работать с Excel
В своих программах я использую следующий вызов Excel из AutoCAD:
Далее можно работать в Excel сколько угодно, а потом когда надо закрыть файл Excel и запустить другой файл происходит следующее:
1) Закрываем Excel при этом процесс Excel остаётся активным в диспетчере задач, а сам Exel при этом уже закрыт. Спрашивается: почему остался работающим процесс, когда программа уже закрылась? Может надо чтобы команду закрытия процесса дал AutoCAD, потому что Excel запускался из AutoCAD? Как это сделать? Или надо специальным образом запускать Excel чтобы следить за тем когда он закрывается?
2) Если попытаться открыть другой файл Excel то Excel работает без отображения ячеек. На экране видны только команды меню и панели инструментов. Ячеек не видно, вместо них чертёж AutoCAD или окно другой работающей программы. Доступа к ячейкам нет. Ясно, что с таким Excelем работать нельзя, неопытных пользователей это просто приводит в ужас! Появляются претензии, что я своим макросом испортил настройки в компьютере и Excel перестал правильно работать! Конечно, чтобы справиться с этой проблемой надо закрыть Excel, открыть диспетчер задач, найти там всё ещё работающий процесс Excel и остановить его. После этого можно запускать снова Excel и никаких проблем не будет. Но разьве объяснишь это обычным пользователям, для обычных пользователей это просто дико слушать и в итоге программа никому не нравится. Спрашивается зачем было делать эту ложку дёгтя в бочка мёда работы Excel из AutoCAD? Как надо правильно запускать Excel из AutoCAD, чтобы он правильно закрывался и нормально потом запускался снова и не было претензий от других пользователей программы?
#2 Ответ от Миша 6 июня 2006г. 03:14:03
- На форуме с 31 декабря 2001г.
- Сообщений: 322
- Спасибо: 0
Re: Правильный вызов Excel из AutoCAD, чтобы дальше можно было работать с Excel
Замечено, что если после закрытия Excel в п.1 закрыть AutoCAD лишний процесс Excel в диспетечере задач тоже останавливается. Может есть специальный метод который может остановить этот процесс без закрытия AutoCAD?
И ещё вопрос: Правильно ли я сделал что отключил вызов функции
так как и без этой функции процесс Excel запускается в диспетчере задач? У меня программа и так работает. По логике, чтобы остановить процесс Excel надо запустить функцию противоположную функции «SendMessage», только что это за функция и как организовать запуск этой функции, чтобы она всегда была на готове и ждала когда закроется Excel? По моему это очень сложно и невозможно. Как вы думаете нет решения этой проблемы?
Источник