Логотип сайта поддержки пользователей САПРО сайте поддержки пользователей САПР Translate to:
Hosting Ukraine

Обновление данных атрибутов из CSV-файлов

Описание подпрограммы для импорта и экспорта данных между чертежом AutoCAD и электронной таблицей Excel.

Tony Hotchkiss,
www.cadalyst.com

Используя команду экспорта данных AutoCAD, которая находится в меню Tools можно извлечь данные атрибутов в файл электронной таблицы Excel или в таблицу, размещенную в самом чертеже. Используя эту возможность, многие найдут хорошей идею редактировать атрибут непосредственно в электронной таблице, но чтобы измененные атрибуты отображались в чертеже необходимо производить обратный экспорт.

В данной статье описан пример подобной подпрограммы. Она состоит из двух файлов (ATTRIBUTE-TABLE-UPDATE.LSP и ATTRIBUTE-TABLE-UPDATE.DCL), и позволяет экспортировать определенные блоки (в нашем случае - датчики пожарной сигнализации) вмести с их атрибутами и x-y координатами в файл в формате CSV (текстовый файл с данными разделенными запятыми), который удобен для открытия в Excel. Программа так же позволяет делать изменения в атрибутах и удалять вставленные в чертеже объекты, если они отсутствуют в CSV-файле.


Рис. 1. Предложение выбора
опции Export/Import.

Загрузите подпрограмму отсюда. Распакуйте и сохраните файл в папку Support которая находится в каталоге, куда установлен AutoCAD. Используя команду Load Application из меню Tools выберем файл ATTRIBUTE-TABLE-UPDATE.LSP и загрузи его.

Чтобы запустить подпрограмму, введите ATU в командной строке, после чего вы увидите контекстное меню с предположением выбрать опцию. Предлагается два варианта - Export (по умолчанию) и Import (рис. 1).

Если вы выберите Export, отобразиться диалоговое окно Results File у вас будет запрошен номер комнаты, в которой находятся интересующие нас датчики сигнализации (рис. 2). Укажем имя файла.


Рис. 2. Диалоговое окно Results File

Файл с результатами экспорта будет иметь расширение CSV, и его можно будет открыть в Notepad или Excel. На рисунке 3. показан файл, открытый в электронной таблицей Excel. Вы можете сделать изменения в столбце ADDRESS1, и удалить при необходимости одну или несколько строк, если соответствующие изменения должны быть сделаны и в чертеже.


Рис. 3. электронная таблица EXCEL.

После того как вы сделаете все изменения и сохраните файл опят в CSV-формате, вы можете опять запустить нашу подпрограмму в AutoCAD, набрав в командной строке ATU, только теперь выберите опцию Import в начальном запросе программы. Отобразиться диалоговое окно Import file, в котором вы должны будите выбрать CSV-файл, содержащий изменения которые вы хотите сделать в чертеже.


Рис. 4. Диалоговое окно Import File.

После того, как файл для импорта будет выбран, изменения в чертеже будут сделаны и отобразиться диалоговое окно Address Changes (Рис. 5). Нажмите на OK чтобы удалить диалоговое окно и проверьте чертеж, все ли изменения сделаны правильно. Обратите внимание на то, что вы можете отобразить диалоговое окно Address Changes в любое время в текущей сессии работы над чертежом набрав в командной строке (Show Changes).


Рис. 5. Диалоговое окно Address Changes.

Описание кода подпрограммы

После запуска моих стандартных функций для обработки ошибок и управления системными переменными, программа активизирует функцию ATT-DATA-OUT, которая определяет опции Export и Import, и вызывает функции GETBLKS, PRINT-OUT, и DO-IMPORT, в зависимости от того, что вы выбрали - экспорт или импорт CSV-файла.

GETBLKS создает список всех вставленных командой INSERT объектов, которые необходимо обработать. В нашем примере мы жестко указали имя блока "FA_DEVICE_INIT" (датчик пожарной сигнализации). Вы можете изменить его на имя блока, с которым вы собираетесь работать в двух операторах IF в коде, который показан ниже:

(if (and (= (vla-get-HasAttributes blkobj) :vlax-true)
       (> (strlen bobjname) 13)
       (= (substr bobjname 1 14) "FA_DEVICE_INIT")
    ) ;_ end of and
   (progn
     (setq inspt (vla-get-InsertionPoint blkobj))
     (setq ipt (vlax-safearray->list (vlax-variant-value inspt)))
     (setq attribs (vla-getAttributes blkobj))
     (setq sarr (vlax-variant-value attribs))
     (setq num (vlax-safearray-get-u-bound sarr 1))
     (if (and (> num 0)
         (<(car ipt) 3000.0)
         )

В нашем примере во второй и третьей строке установлены параметры для включения вставленных блоков. По логике программы это происходит, если имя блока больше чем 13 символов и первые 14 символов - FA_DEVICE_INIT. Вы можете изменить это для чтобы программа обрабатывала ваши блоки. В предпоследней строке показанного кода указывается, что необходимо рассматривать только те вставки блока, где точка вставки меньше чем 3,000" в направлении оси X. Вы так же можете изменить это в соответствии с вашими критериями.

Следующая функция, PRINT-OUT, ссылается на несколько специфических атрибутов - ADDRESS1 и DEVICE_LOCATION - вы можете изменить их на ваши атрибуты блока в сегменте кода функции PRINT-OUT, который показан ниже:

(write-line "ADDRESS1,Name,Device_Location,floor,X,Y" f1)
(repeat (length blklst)
  (setq lst (nth (setq i (1+ i)) blklst))
  (setq str (strcat (cadr (assoc "ADDRESS1" (nth 1 lst)))
                ","
                (car lst)
                ","
                (cadr (assoc "DEVICE_LOCATION" (nth 1 lst)))
                ","
                (itoa floor)
                ","
                (rtos (car (last lst)))
                ","
                (rtos (cadr (last lst)))
          ) ;_ end of strcat
  ) ;_ end of setq
  (write-line str f1)
) ;_ end of repeat

Функция DO-IMPORT открывает предназначенный для импорта CSV-файл и вызывает функцию DO-ADDRESS для построчного чтения этого файла, возвращает она список точек вставки блоков и список изменений для отображения в диалоговом окне Address Changes. Если вы хотите настроить эту часть кода для своих нужд, вы должны придерживаться структуры CSV-файла как показано на рис. 3, с учетом следующих критериев:

Имена атрибутов, упомянутые выше, также присутствуют в последних двух описанных функциях и должны быть изменены соответственно при необходимости.



Copyright © Сайт поддержки пользователей САПР by Victor Tkachenko