Заполнение атрибутов блоков из excel autocad
Цель - перенумеровать мебель на плане здания нумерация и подсчет легче производятся в Excel, а нумерация на этаже сквозная , как следствие при изменении количества стульев в комнате х приходится переписывать значения всех стульев начиная с этой комнаты. пока закончишь уже в другую комнату добавили/убрали стол или стул, как вариант внесение данных из хлс файла
> Андрей
Теперь цель мероприяти понятна.
Посмотри в разделе Готовых прогам. Там было что то похожее.
Второе для такой цели можно создать таблицу в 2006 или 2007 и их значения привязать к мебели.
Таблицы похожи на Excel_евские но правда немного дубоваты. Но возможно это будет достаточно.
И есть ещё программа ToolPac. В ней есть работа с таблицами Excel, но сам я это не пробовал. Если найду Архив могу сбросить на Мыло.
С радостью приму файл на почту, может и поможет . с таблицами в 2007 пробывал к сожелению неудобно, вероятно не владею полным спектром операций (нету гибкости переноса и пересчета информации), надеюсь даную тему всетаки осветят - работа с обьектами баз данных или просто таблиц может позволить быстрее создавать описания без усложнения и добавления третих програм.
> Андрей
Отправил.
а может мебель исполнять как блоки с атрибутами и потом "извлечеие атрибутов" и автоматическое пересчитывание блоков (мебели в данном случае)?
я тут не очень внимательна и поэтому прощения прошу.
Тут что-то вроде наброска программы по пересчету ьлоков на листе с лево-верх. право-низ
укажите мышкой блок
и сдвиг цифры (число с клавиатуры)
конечно лучше нумеровать в одельном слое и при необходимости все вытирать и пересчитывать заново.
(defun c:blc()
(setq list_cen '())
;===============================================================================
(setq id_bl (car (entsel "Укажите блок")))
(setq rast (getreal "\nВведите смещение цифры"))
;==============================================================================
(setq vid_bl (vlax-ename->vla-object id_bl))
(setq bl_name (vla-get-name vid_bl))
(setq cn_bl (ssget "_x" (list (cons 0 "insert")(cons 2 bl_name))))
(lena cn_bl)
;(setq l1 (vl-sort list_cen (function (lambda (e1 e2) ( < (car e1) (car e2))))))
;(setq l2 (vl-sort list_cen (function (lambda (e1 e2) (> (cadr e1) (cadr e2))))))
;====================== сортировка=============
(setq X_Sorted (vl-sort list_cen (function (lambda (e1 e2) ( < (car e1) (car e2))))))
(setq Y_Sorted (vl-sort X_Sorted (function (lambda (e1 e2) (and (equal (car e1) (car e2)) (> (cadr e1) (cadr e2)))))))
;==============================================
;(sasha l1)
(sasha Y_Sorted)
)
;===============================================================
(defun lena (A)
(setq idd 0)
(setq nn (sslength A))
(setq kol nn)
(repeat kol
(setq el (ssname A idd))
(setq vel (entget el))
(setq cenid (cdr (assoc 10 vel)))
(setq list_cen (append list_cen (list cenid)))
(setq idd (1+ idd))
)
)
;==============================================================
(defun sasha (A)
(setq id 1)
(setq idd 0)
(setq nn (length A))
;====================
(repeat nn
(setq el (nth idd A))
(setq x (car el))
(setq y (cadr el))
(setq x (+ x rast))
(setq y (+ y rast))
(setq pt (list x y))
(command "text" pt "3" "0" (rtos id))
(setq idd (1+ idd))
(setq id (1+ id))
)
;===================
)
Здраствуйте, я хотел бы узнать как вставить таблицу из Excel в AutoCAD, чтоб она была такая же таблица как в автокаде или же хотябы чтоб она небыла как блок.
Когда я вставляю таблицу из Excel в AutoCAD у меня получаеться как блок, т.е. типа как фото.
И вообще есть еще другой вариант вставки таблицы из Excel в AutoCAD?
Дороги, Конструкции, Тоннели
Копируешь фрагмент в экселе, открываешь втокад.
Edit - Paste special (Специальная вставка) - AutoCAD entries (Объекты автокада).
Делает табличку, сохраняет несложные вычисления (+, - и т.д.)
Копируешь фрагмент в экселе, открываешь втокад.
Edit - Paste special (Специальная вставка) - AutoCAD entries (Объекты автокада).
Делает табличку, сохраняет несложные вычисления (+, - и т.д.)
Благодарен, все получилось. Еще хотел бы узнать, про связь с экзел. Я все сделал как вы сказали, но вот почему то связи не получается(т.е. когда в экзели чтото меняю то не меняеться значения таблицы в автокаде)
Благодарен, все получилось. Еще хотел бы узнать, про связь с экзел. Я все сделал как вы сказали, но вот почему то связи не получается(т.е. когда в экзели чтото меняю то не меняеться значения таблицы в автокаде)
Есть два варианта.
1. это как вы сначала вставляли. Редактировать надо не файл excel из которого копировалось, а щелкнуть правой кнопкой на "блоке" и в контекстном меню выбрать OLE-открыть.
2. почитать про связи ячеек таблицы autocad в справке. Второй способ более правилен с моей точки зрения (например, первый вставит в чертеж вообще весь файл а не только скопированное), но требует аккуратности.
Люди, а как вставить из Excel в AutoCAD не таблицу с данными, а сами данные (из ячеек) в существующую таблицу в AutoCADe?
То есть как в Excele копируешь на одном листе данные из выделеных ячеек и можно вставить их на другой лист.
ЗЫ Очень надо! А так по одной ячейке копировать много.
MrChert, как вариант, скопируй всю нужную область ячеек в ексле, вставь в акад через спец вставку как объектв акад, далее выдели нужную область ячеек во вставленной таблице и вставь в нужную таблицу через копирование (ctrl+c > ctrl+v)
MrChert, как вариант, скопируй всю нужную область ячеек в ексле, вставь в акад через спец вставку как объектв акад, далее выдели нужную область ячеек во вставленной таблице и вставь в нужную таблицу через копирование (ctrl+c > ctrl+v)
Артиллерист - вертолётчик. Дипломированный инженер-механик. Technologist
А если с обратной задачей попробывать?
Есть таблица сформатированная в екселе в шаблон-бланк формата А4 или А3, с полем для эскиза, но не хочется возиться с конвертацией и графическими форматами файлов, а сразу из имеющегося чертежа взять кусок и вставить в ексель, что бы точно вставить то что взял, без лишних ненужных объектов Может быть понадобиться в дальнейшем редактирование, по этому хотелось бы сам вставленый кусок сохранить доступным для этого.
.
P.S.Перечитал. Немного не так я выразился. Собственно проблема не во вставке как таковой, а в точной привязке и неизменности этого вставленного эскиза по размерам и пропорциями.
Не могу изменить артибу блока. Переместить в новое место. Добавить новый атрибут. Сейчас используемом блоке усиления проёмов, понадобился ещё один атрибут. Сумарная блина. В новых блоках он появляется в старых нет.
Есть ли лекарство?
Прочёл.. Там мараль басни как я понял: "Аутодеск хотел как лудше а вышло как всегда, и они дали нам инструмент Обновления атрибутов по аналогу."
Т.е. Добавив новый атрибут в блок через редактор блока. Я его вставляю в чертёж и давлю, - синхронизировать.
Все атрибуты приобретают свойства моего блока. После одновления "полей", все "поля" становятся правельными, но текстовые атрибуты утеряны навсегда..
Я правельно понял?
Может быть есть возможность (лисп) пройтись по всему чертежу перепесать данные атрибутов) а потом вписать обратно после синхронизации?
П.с.У меня конечно блоков не тысячи но скоро будут сотни. Хочется сначала подумать..
Может быть есть возможность (лисп) пройтись по всему чертежу перепесать данные атрибутов) а потом вписать обратно после синхронизации?
ытя, а я проверил, и не тока на тестовом. Тока это через кривое место..
Хмурый, блоки само собой разные для разных элементов. Но так как динамические помечены атрибутами.
vadim_evg1, спасибо сейчас посмотрю )
не поддается обновлению атрибутов блок.
ни _battman ни _attsync.
только при вставке нового блока мм. отваливаются, а у меня тысячи блоков уже вставлено, и нужно их обновить.
Че делать?
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
у меня твой чертёжик регенерируется и меняется значение атрибута (поля обновляются).
FIELDEVAL какая?
есть ещё команда _UPDATEFIELD
поля у меня тоже обновляются.
Проблема в другом.
Я в блоке поменял атрибут - убрал ненужное упоминание про мм.
А в модели мм остались и никакими способами не хотят уходить.
"1500 мм" показывает атрибут, а надо "1500"
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr, а есть возможность вернуть в блок "мм"? Тогда можно будет переименовать один из блоков, удалить из него "мм" и заменить все блоки на этот новый блок.
не поддается обновлению атрибутов блок.
ни _battman ни _attsync.
только при вставке нового блока мм. отваливаются, а у меня тысячи блоков уже вставлено, и нужно их обновить.
Че делать?
Попробуйте создать новый пустой чертеж в котором будет только нужный Вам блок без мм.
Проконтролируйте чтобы у блока было точно такое же имя и точка вставки как в старом чертеже.
Вставьте в новый чертеж (как взорванный блок) старый чертеж полностью.
поля у меня тоже обновляются.
Проблема в другом.
Я в блоке поменял атрибут - убрал ненужное упоминание про мм.
А в модели мм остались и никакими способами не хотят уходить.
"1500 мм" показывает атрибут, а надо "1500"
wetr - не уверен что полностью усек терминологию (на русском). Попробуй удалить мм в самом блоке (не в чертеже) потом вставляй в чертеж извне, так чтобы галочка стояла insertion point specify on screen, когда спросит ОБНОВИТь - ПОДТВЕРДИ, по идее должно получится.
Надеюсь что понял проблему правильно. Попробовал на своем компе - получилось
ведущий инеженер-проектировщик слаботочных систем
у него "мм" были каким-то образом включены в поле, в формулу и ничего не помогает. Если-бы формула расчёты длины была отдельно от "мм"- не было-бы проблемы, то есть, "мм" не должны быть в одном поле с формулой
В чертеже есть динамические блоки с атрибутами, которые представляют поля, берущие данные из объектов блока.
При изменении формулы поля, определяющего атрибут, и обновлении чертежа изменений значений атрибутов во вхождениях блоков не происходит, но новые блоки с тем же именем вставляются уже с атрибутом, подсчитанным по новой формуле.
В справке автокада есть такая фраза: "обновление свойств атрибутов во вхождениях блоков не оказывает никакого влияния на значения этих атрибутов." Так вот, как всё-таки добиться того, чтобы значения атрибута в существующих вхождениях изменились? Спасибо.
Я инженер-проектировщик ОВиК, не программист. И не хочу, да и некогда, вникать в серьезное программирование. Чаще всего появляется ситуация, что нужно как-то автоматизировать рутину здесь и сейчас. На помощь приходит простой язык VBA.
Далее я покажу, как можно без особых забот сделать самому то, за что серьезные ребята берут не плохие денежки. А именно перенос данных из Excel в AutoCAD и обратно. Заинтересованных прошу под кат.
Программировать будем на стороне Excel — мне так проще. Для подключения нужно войти в режим разработчика: Alt+F8 Либо можно открыть вкладку «разработчик» из настроек ленты.
В окне разработчика VBA входим в верхнее меню: Tools/References. В этом окне нужно поставить галочку на вашей версии AutoCAD
В моем случае это AutoCAD 2014 Type Library. Далее нужно в левом окне создать в вашей книге модуль, как на скриншоте (Module)
И в модуль вставляем нижеприведенный код:
Аналогичным способом можно создавать блоки с атрибутами, в которые можно вставлять текст из ячеек.
Нужно внести в верхний код изменения вроде:
Код обновления текста по хэндлу — написан ниже: 'получаем хэндл из ячейки, в которую мы записали кодом выше.
entHandle = ActiveCell.Offset(0, 3).Value 'получили наш блок по хэндлу
Set blockObj = acadDoc.HandleToObject(entHandle)
А дальше делаем всё то же самое, что и выше.
Для того, чтобы немного разъяснить как это работает вживую — записал видео:
Как видите, кода минимум, однако на больших объектах мне экономит по несколько часов работы. И снижается риск ошибки. Т.к. обычно это выглядит следующим образом у проектировщиков — открываются два окна на разных экранах, и или вручную, или через буфер обмена начинается заполнение выносок или блоков на чертеже.
Опять же чем хорош VBA — что он всегда под рукой :) Excel-то основной инструмент у инженера.
Всем здравствуйте!
Подскажите пожалуйста, как выполнить вставку готового блока в Автокаде по данным из Эксель и по заданным координатам? P.S. Данные забитые в ячейках Эксель соответствуют именам блоков в Автокаде.
А как с помощью Автокада (макроса в Автокаде) считать информацию с ячейки Экселя и вывести как результат в виде блока?
Сделать мне предложение,от которого я не смогу отказаться,получить готовый код
В области написания макросов у меня очень большие пробелы. Хотя из предложенного варианта 1 можно было бы брать и работать, но понять как это работает будет трудно. А по варианту 2 все зависит от цены вопроса, и если то что мы разработаем будет так сказать приносить результат, то почему бы и не договориться.
Вообще в этой области хотелось бы побольше иметь знакомых, так как написание макросов в VBA это интересно, ну и хотел бы научиться.
Уважаемый господин Doober, быть может дальнейшая просьба покажется наглостью, но не могли бы все таки подсказать как выполнить макрос для вставки готового блока по именам в Автокаде 2012 соответствующие данным из ячеек Эксель 2010 и по координатам прописанные также в ячейках Эксель 2010 (допустим в ячейке А1 написано - "Квадрат", А2 - "Прямоугольник", а в В1 - координаты для "Квадрата" - 49;168, В2 - координаты для "Прямоугольника" - 78;168, то в Автокаде должны по указанным координатам выстроится готовые блоки из "Квадрата" и "Прямоугольника").
Подразумевается,что блоки с именами Квадрат и прямоугольник имеются в наличии
Спасибо, всё работает. Вы настоящий профессионал. Но есть маленькое "но", данный макрос выполнен для диапазона ячеек "A1:B2", а как сделать для более большего диапазона, ну к примеру для ячеек "A1:B1000? Неужто придется команду "BlockName = K(1, 1)" выполнять 1000-у раз?
Ка ни странно,но для большого количества строк в файле Excel,количество строк кода меньше.
Читайте также: