Schöck
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP для замены множества чисел в Autocad из таблицы Excel

LISP для замены множества чисел в Autocad из таблицы Excel

Ответ
Поиск в этой теме
Непрочитано 13.04.2019, 23:30 #1
LISP для замены множества чисел в Autocad из таблицы Excel
gorodetsky18
 
Регистрация: 13.04.2019
Сообщений: 9

Доброго времени суток. Подскажите возможно ли решить следующую задачу:
В dwf файле имеется некоторое количество чисел (_text желтым цветом), которое нужно заменить из файла Excel.
Заранее спасибо!
Просмотров: 2546
 
Непрочитано 14.04.2019, 00:25
#2
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,643


1. Используйте присоединение файлов к сообщению (для этого переключитесь в расширенный режим).
2. Разве dwf файлы доступны для изменения? Может, все таки dwg?
3. Необязательно на лиспе: по COM-интерфейсу из Excel сграбьте с использованием фильтра примитивы желтого текст на заданном слое, данные из таблицы экселя загоните в коллекцию (с ключом из первого столбца), и в цикле замените полученные ранее тексты на значения из коллекции.
Сергей812 вне форума  
 
Непрочитано 14.04.2019, 11:12
#3
Boxa

КЖ; C#
 
Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,011


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Разве dwf файлы доступны для изменения? Может, все таки dwg?
ну если очень хочется, то можно и изменять =о)
И соглашусь, Lisp для этой задачи не самое лучший выбор.
__________________
_бложиг
Boxa на форуме  
 
Автор темы   Непрочитано 14.04.2019, 11:17
#4
gorodetsky18


 
Регистрация: 13.04.2019
Сообщений: 9


Сергей812, да извиняюсь в dwg файле.

----- добавлено через ~14 мин. -----

3й пункт не совсем понятен (не такой продвинутый пользователь). Если можно по подробнее.
И в идеале, чтобы расположение и поворот _text оставались прежними, но с новыми значениями из excel.
Миниатюры
Нажмите на изображение для увеличения
Название: 11122.jpg
Просмотров: 59
Размер:	68.8 Кб
ID:	213061  
gorodetsky18 вне форума  
 
Непрочитано 14.04.2019, 11:35
#5
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,643


Цитата:
Сообщение от Boxa Посмотреть сообщение
Lisp для этой задачи не самое лучший выбор.
ну в любом случае либо придется по COM в эксель за данными из лиспа лезть, либо из экселя рулить самим акадом. Дело вкуса и есть ли уже наработки (библиотеки) под соответствующий язык)

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от gorodetsky18 Посмотреть сообщение
3й пункт не совсем понятен (не такой продвинутый пользователь). Если можно по подробнее.
основами VBA владеете в экселе?

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от gorodetsky18 Посмотреть сообщение
И в идеале, чтобы расположение и поворот _text оставались прежними, но с новыми значениями из excel.
если замените только содержимое - зачем самому примитиву куда-то "убегать"?)
Сергей812 вне форума  
 
Автор темы   Непрочитано 14.04.2019, 12:04
#6
gorodetsky18


 
Регистрация: 13.04.2019
Сообщений: 9


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
основами VBA владеете в экселе?
к сожалению нет (
gorodetsky18 вне форума  
 
Непрочитано 14.04.2019, 12:19
#7
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,643


Цитата:
Сообщение от gorodetsky18 Посмотреть сообщение
к сожалению нет (
Ну и лисп скорее всего тоже.

Ну тогда у вас 3 варианта:
1. Начать изучать любой из языков программирования (хотя бы основы) и начать самому писать, задавая вопросы в ходе процесса.
2. Выложить образцы (а не какую то картинку) и ждать, пока у кого-то из форумчан будет время и желание решить вашу проблему.
3. Обратиться в раздел исполнителей.

Затравка для решения на VBA - тыц, тыц, тыц.
Сергей812 вне форума  
 
Автор темы   Непрочитано 14.04.2019, 12:25
#8
gorodetsky18


 
Регистрация: 13.04.2019
Сообщений: 9


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
2. Выложить образцы (а не какую то картинку) и ждать, пока у кого-то из форумчан будет время и желание решить вашу проблему.
Файлы прикрепил.
Вложения
Тип файла: dwg
DWG 2007
Пр_С4_9-10эт.dwg (1.40 Мб, 14 просмотров)
Тип файла: xls Disto_с1.4 11эт.xls (23.0 Кб, 12 просмотров)
gorodetsky18 вне форума  
 
Непрочитано 14.04.2019, 14:18
#9
trir


 
Регистрация: 18.12.2010
Сообщений: 3,381


через БД это делается за 5 минут
trir вне форума  
 
Непрочитано 14.04.2019, 15:06
#10
koMon


 
Регистрация: 26.09.2017
Сообщений: 355


можно и не лазить в xls из лиспа:
1. сделать из xls csv, там всего одна колонка
2. прочитать в лиспе csv в в список
3. в том же лиспе пройтись по нужным текстам и заменить порядковое содержимое их на nth тексты из списка п.2
koMon вне форума  
 
Непрочитано 14.04.2019, 17:34
#11
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,325
Отправить сообщение для maratovich с помощью Skype™


А никто не задумался что это всё заменит не только нужную цифру, но все подобные.
нет привязки к хэндлу или ID
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 14.04.2019, 17:41
#12
koMon


 
Регистрация: 26.09.2017
Сообщений: 355


разве поменяется handle при изменении свойства textstring у текстового объекта?
koMon вне форума  
 
Непрочитано 14.04.2019, 17:44
#13
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,325
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от koMon Посмотреть сообщение
у текстового объекта?
у какого ? у какого именно объекта ?
автор хочет поменять в чертеже цифру 7 на 2134, ну и поменяете вы её..... везде ! во всём чертеже где будет встречаться 7. Как вы поймёте где именно нужно заменить ?
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 14.04.2019, 17:49
#14
koMon


 
Регистрация: 26.09.2017
Сообщений: 355


у того, у которого textstring="7" и который, как я понимаю является уникальным
koMon вне форума  
 
Непрочитано 14.04.2019, 17:53
#15
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,643


Слой "_P1", цвет желтый - видимо по этим критериям.
Сергей812 вне форума  
 
Автор темы   Непрочитано 14.04.2019, 17:55
#16
gorodetsky18


 
Регистрация: 13.04.2019
Сообщений: 9


Цитата:
Сообщение от koMon Посмотреть сообщение
у того, у которого textstring="7" и который, как я понимаю является уникальным
все верно, номер 7 уникальный как и все остальные номера. Повторяющихся нет.
Немного поясню. В dwg файле уникальных номер порядка 500 шт. и каждый из них нужно заменить на значение из excel. 1 на 720, 2 на 2190, 3 на 597 и т.д.
gorodetsky18 вне форума  
 
Непрочитано 14.04.2019, 17:59
#17
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,325
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от koMon Посмотреть сообщение
и который, как я понимаю является уникальным
по принципу - "Не читал, но осуждаю!"

Эх представляю как автор будет кусать локти после таких изменений.
Offtop: без сортировок здесь не обойтись
__________________
Вопрос : Где находится Тургай ? Ответ : Между Парагваем и Уругваем.....
maratovich вне форума  
 
Непрочитано 14.04.2019, 18:03
#18
koMon


 
Регистрация: 26.09.2017
Сообщений: 355


напротив) и читал и предлагаю

Цитата:
Сообщение от maratovich Посмотреть сообщение
по принципу - "Не читал, но осуждаю!"

Эх представляю как автор будет кусать локти после таких изменений.
Offtop: без сортировок здесь не обойтись
Цитата:
Сообщение от gorodetsky18 Посмотреть сообщение
все верно, номер 7 уникальный как и все остальные номера. Повторяющихся нет.
Немного поясню. В dwg файле уникальных номер порядка 500 шт. и каждый из них нужно заменить на значение из excel. 1 на 720, 2 на 2190, 3 на 597 и т.д.
----- добавлено через ~8 мин. -----
gorodetsky18, если не горит завтра выложу лисп
koMon вне форума  
 
Непрочитано 14.04.2019, 18:18
#19
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,643


Цитата:
Сообщение от gorodetsky18 Посмотреть сообщение
все верно, номер 7 уникальный как и все остальные номера. Повторяющихся нет.
не повторяющихся где - на слое или во всем чертеже желтый текст уникальный?
Сергей812 вне форума  
 
Автор темы   Непрочитано 14.04.2019, 18:41
#20
gorodetsky18


 
Регистрация: 13.04.2019
Сообщений: 9


Цитата:
Сообщение от koMon Посмотреть сообщение
если не горит завтра выложу лисп
Не горит. Спасибо огромное!
gorodetsky18 вне форума  
 
Непрочитано 14.04.2019, 18:41
#21
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,643


в общем проще самому посмотреть: на слое "_Р1" (буква русская), примитив текст, цвет желтый = 2. Тогда получаем уникальные числа и только числа.
ТС увидел, что будет завтра лисп - и все, отключился полностью от реальности)
Сергей812 вне форума  
 
Автор темы   Непрочитано 14.04.2019, 18:42
#22
gorodetsky18


 
Регистрация: 13.04.2019
Сообщений: 9


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
не повторяющихся где - на слое или во всем чертеже желтый текст уникальный?
во всем чертеже желтый текст уникальный.
gorodetsky18 вне форума  
 
Непрочитано 14.04.2019, 18:46
#23
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,643


Цитата:
Сообщение от gorodetsky18 Посмотреть сообщение
во всем чертеже желтый текст уникальный.
Пропарсил чертеж - желтый текст без учета слоя:

ОВ1 A-GENM-IDEN
ЭО A-GENM-IDEN
ОВ1 A-GENM-IDEN
ЭО A-GENM-IDEN
СС A-GENM-IDEN
ПД A-GENM-IDEN
ДУ A-GENM-IDEN
ПД A-GENM-IDEN
ВК A-GENM-IDEN
ЭО A-GENM-IDEN
ОВ2 A-GENM-IDEN
ОВ1 A-GENM-IDEN
ОВ2 A-GENM-IDEN
ДУ A-GENM-IDEN
ПД A-GENM-IDEN
первый столбец значение, второй - имя слоя. Где там уникальность в первом столбце?
Сергей812 вне форума  
 
Непрочитано 14.04.2019, 20:06
#24
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 36,605


Цитата:
Сообщение от gorodetsky18 Посмотреть сообщение
В dwg файле уникальных номер порядка 500 шт. и каждый из них нужно заменить на значение из excel. 1 на 720, 2 на 2190, 3 на 597 и т.д.
Эх, если бы это были блоки с атрибутами!
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 14.04.2019, 20:20
#25
koMon


 
Регистрация: 26.09.2017
Сообщений: 355


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Где там уникальность в первом столбце?
среди жёлтого текста есть числа, вот они-то и будут уникальными порядковыми номерами excel-а, ну или nth списка. как-то так)
koMon вне форума  
 
Автор темы   Непрочитано 14.04.2019, 20:33
#26
gorodetsky18


 
Регистрация: 13.04.2019
Сообщений: 9


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
Пропарсил чертеж - желтый текст без учета слоя:

ОВ1 A-GENM-IDEN
ЭО A-GENM-IDEN
ОВ1 A-GENM-IDEN
ЭО A-GENM-IDEN
СС A-GENM-IDEN
ПД A-GENM-IDEN
ДУ A-GENM-IDEN
ПД A-GENM-IDEN
ВК A-GENM-IDEN
ЭО A-GENM-IDEN
ОВ2 A-GENM-IDEN
ОВ1 A-GENM-IDEN
ОВ2 A-GENM-IDEN
ДУ A-GENM-IDEN
ПД A-GENM-IDEN
первый столбец значение, второй - имя слоя. Где там уникальность в первом столбце?
Во вложении только _text который нужно заменить

Желтый текст - это порядковый номер замера, который делается лазерным дальномером и записывается сразу в таблицу excel, поэтому там повторных чисел быть не должно.
Вложения
Тип файла: dwg
DWG 2007
Пр_С4-только текст.dwg (123.4 Кб, 11 просмотров)
gorodetsky18 вне форума  
 
Непрочитано 14.04.2019, 20:41
#27
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 6,643


Ну так все это расположено на слое "_Р1" (видимо, Размер1), как и писал выше. А заменять любой желтый текст с числом в чертеже - это так, рулетка)
Сергей812 вне форума  
 
Непрочитано 15.04.2019, 10:33
#28
koMon


 
Регистрация: 26.09.2017
Сообщений: 355


Код:
[Выделить все]
 
;**********
(vl-load-com)
;**********
(defun c:Replace_text ()
	(setq csv_file_name (getfiled "Выберите файл CSV с чилами для замены" (strcat (vlax-get (vla-get-ActiveDocument (vlax-get-acad-object)) 'Path) "\\") "csv" 16)
		  csv_file_id (open csv_file_name "r")
		  change_index 1
		  changed_count 0
		  replacing_numbers_list '()
	)
	(while (setq current_string (read-line csv_file_id))
		(setq replacing_numbers_list (cons (cons (itoa change_index) current_string) replacing_numbers_list)
			  change_index (1+ change_index)
		)
	)
	(close csv_file_id)
	(vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
	(setq yellow_text_sset (ssget "_x" '((0 . "TEXT") (62 . 2))))
	(while (not (zerop (sslength yellow_text_sset)))
		(setq yellow_text_object (vlax-ename->vla-object (ssname yellow_text_sset 0)))
		(if (null (vlax-ldata-get yellow_text_object "Changed"))
			(if (assoc (vla-get-textstring yellow_text_object) replacing_numbers_list)
				(progn
					(vlax-ldata-put yellow_text_object "Changed" t)
					(vlax-ldata-put yellow_text_object "Org_string" (vla-get-textstring yellow_text_object))
					(vla-put-textstring yellow_text_object (cdr (assoc (vla-get-textstring yellow_text_object) replacing_numbers_list)))
					(setq changed_count (1+ changed_count))
				)
			)
		)
        (setq yellow_text_sset (ssdel (ssname yellow_text_sset 0) yellow_text_sset))
	)
	(vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
	(princ (strcat "\nИзменено " (itoa changed_count) " текстов"))
	(princ)
)

Последний раз редактировалось koMon, 15.04.2019 в 11:45.
koMon вне форума  
 
Автор темы   Непрочитано 15.04.2019, 11:59
#29
gorodetsky18


 
Регистрация: 13.04.2019
Сообщений: 9


Цитата:
Сообщение от koMon Посмотреть сообщение
Код:
[Выделить все]
 
;**********
(vl-load-com)
;**********
(defun c:Replace_text ()
	(setq csv_file_name (getfiled "Выберите файл CSV с чилами для замены" (strcat (vlax-get (vla-get-ActiveDocument (vlax-get-acad-object)) 'Path) "\\") "csv" 16)
		  csv_file_id (open csv_file_name "r")
		  change_index 1
		  changed_count 0
		  replacing_numbers_list '()
	)
	(while (setq current_string (read-line csv_file_id))
		(setq replacing_numbers_list (cons (cons (itoa change_index) current_string) replacing_numbers_list)
			  change_index (1+ change_index)
		)
	)
	(close csv_file_id)
	(vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
	(setq yellow_text_sset (ssget "_x" '((0 . "TEXT") (62 . 2))))
	(while (not (zerop (sslength yellow_text_sset)))
		(setq yellow_text_object (vlax-ename->vla-object (ssname yellow_text_sset 0)))
		(if (null (vlax-ldata-get yellow_text_object "Changed"))
			(if (assoc (vla-get-textstring yellow_text_object) replacing_numbers_list)
				(progn
					(vlax-ldata-put yellow_text_object "Changed" t)
					(vlax-ldata-put yellow_text_object "Org_string" (vla-get-textstring yellow_text_object))
					(vla-put-textstring yellow_text_object (cdr (assoc (vla-get-textstring yellow_text_object) replacing_numbers_list)))
					(setq changed_count (1+ changed_count))
				)
			)
		)
        (setq yellow_text_sset (ssdel (ssname yellow_text_sset 0) yellow_text_sset))
	)
	(vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))
	(princ (strcat "\nИзменено " (itoa changed_count) " текстов"))
	(princ)
)
Просто Супер!!! Спасибо огромное!
gorodetsky18 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP для замены множества чисел в Autocad из таблицы Excel

Расчет зданий и сооружений в сейсмоопасных районах
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связь AutoCad с Excel. Связь "Таблицы свойств блока" в "Редакторе блоков" и базы Excel. Марсель113 LISP 3 18.01.2019 13:29
Достать "формулу" из ячейки таблицы autocad tsetse LISP 43 23.12.2018 08:48
Lisp. Работа с таблицами AutoCAD SNIIP LISP 19 12.12.2018 19:23
Как перенести координаты из AUTOCAD в Excel и обратно с помощью LISP? aydinkhalil LISP 11 24.12.2014 10:51
Как перенести значения из таблицы Excel в AutoCAD в виде текста? Yur.OK_SPb AutoCAD 22 01.08.2011 16:42