вторник, 13 февраля 2018 г.

Строим полилинию в AutoCAD по координатам из таблицы Excel

Добрый день!

Возникла недавно простая задача: построить в AutoCAD полилинию по координатам из таблицы Excel.


Знаю, что можно написать программу на AutoLISP (или найти готовую), но дело осложнялось тем, что создать полилинию надо было в AutoCAD LT, который, как известно, не поддерживает программирование. После недолгого изучения вопроса решение было найдено. Делюсь.

Задача: в таблице Excel содержатся координаты точек. Необходимо по этим точкам создать полилинию в AutoCAD. При этом, формат файла Excel может быть разным в зависимости от того, откуда получены данные (результат лазерного сканирования, топосъемка, таблица координат от контрольно-измерительной машины и пр.)

Решение: сначала штатными функциями Excel преобразовать координаты в вид X.X,Y.Y, скопировать массив координат в буфер обмена, затем в AutoCAD запустить команду ПЛИНИЯ (_PLINE) и подставить значения координат из буфера.

Предлагаю пошаговую инструкцию.



Подготовка данных в Excel


Открываем таблицу Excel.

В нашем случае в таблице каждая координата точки записана в отдельной ячейке



ВАЖНО! В AutoCAD координаты вводятся в формате X.X,Y.Y - т.е. дробные части координат отделяются друг от друга точкой, а сами координаты  - запятой!

Т.к. в нашем случае в таблице Excel дробные части отделены запятой, то необходимо заменить их на точки. Для этого на ленте перейдем на вкладку Главная ➤ панель Редактирование Заменить.

В появившемся окне Найти и заменить в качестве параметра Найти вводим запятую, в качестве Заменить на - точку и нажимаем кнопку Заменить все


В результате все числа в таблице будут приведены к нужному нам формату


Обратите внимание, что если в вашем исходном файле в качестве разделителя используется точка, то дополнительно преобразовывать ничего не нужно.

Движемся дальше. Теперь необходимо разрозненные координаты X и Y объединить в одну запись в ячейке. Для этого можно использовать стандартные функции Excel, например, СЦЕПИТЬ или ОБЪЕДИНИТЬ.

В соседнем столбце вводим формулу =СЦЕПИТЬ(A1;",";B1)

В этой форуме A1 и B1 - адреса ячеек с координатами, "," - символ, который будет вставлен между ними


UPD: в комментариях предложили еще ввести параметр _none для отключения привязки. В этом случае значение формулы будет таким  =СЦЕПИТЬ("_none ";A1;",";A1)

Перетаскиваем маркер заполнения ячеек для того, чтобы скопировать формулу во все ячейки столбца. В итоге получаем готовую таблицу координат


Если для объединения вы будете использовать функцию ОБЪЕДИНИТЬ, то формула будет следующая =ОБЪЕДИНИТЬ(",";ИСТИНА;A1;B1)

Главное, на что нужно обратить внимание: в результате преобразований мы должны получить в ячейке запись вида X.X,Y.Y.

Выделяем все полученные ячейки с координатами и копируем их содержимое в буфер обмена


Строим полилинию в AutoCAD


Запускаем AutoCAD или AutoCAD LT.

Запускаем команду ПЛИНИЯ (_PLINE) и в командную строку вставляем содержимое буфера обмена


Полилиния готова


Заключение


Как видите, многие задачи можно упростить и автоматизировать даже без программирования, но далеко не все.

Если для вас привычней формат видеоурока, то он уже доступен



С остальными приемами работы в AutoCAD можно познакомиться на этой странице блога.


С уважением, Андрей

Если вы получили ответ на свой вопрос и хотите поддержать проект материально - внизу страницы для этого есть специальная форма.

7 комментариев:

  1. Как говорится - век живи, век учись

    ОтветитьУдалить
  2. Забыл сказать, что надо отключать привязку. Поэтому формула через СЦЕПИТЬ будет такая:
    =сцепить("_none ";a1;",";b1)
    А еще лучше вообще использовать одну-единственную формулу:
    =СЦЕПИТЬ("_none ";ПОДСТАВИТЬ(ТЕКСТ(A1;"# ###,0000");",";".");",";ПОДСТАВИТЬ(ТЕКСТ(B1;"# ###,0000");",";"."))

    ОтветитьУдалить
    Ответы
    1. Алексей, спасибо! Добавил.

      Правда, от такой формулы бОльшая часть моих пользователей сойдет с ума :-)

      Удалить
  3. Фу ты, формат представления текста надо без пробелов сделать...
    =СЦЕПИТЬ("_none ";ПОДСТАВИТЬ(ТЕКСТ(A1;"#,0000");",";".");",";ПОДСТАВИТЬ(ТЕКСТ(B1;"#,0000");",";"."))

    Вроде должно сработать

    ОтветитьУдалить
  4. Охренеть!!! Вы бы ещё диссертацию на эту тему написали!!!

    ОтветитьУдалить