Как объединить таблицы в автокаде
Создание и редактирование таблиц
Создание и редактирование таблиц
Создание и редактирование таблиц
- Выделите объединяемые ячейки в таблице любым из следующих способов:
- Выделите ячейку и, нажав клавишу SHIFT, выберите другую ячейку для выделения этих двух ячеек и всех ячеек, находящихся между ними.
- Укажите выбранную ячейку и, удерживая нажатой кнопку мыши, укажите остальные выбираемые ячейки, а затем отпустить кнопку.
Полученная в результате объединенная ячейка должна иметь прямоугольную форму.
- Все: объединение всех ячеек в выбранном прямоугольном диапазоне.
- По строкам: объединение ячеек горизонтально, с удалением вертикальных линий сетки; горизонтальные линии сетки остаются нетронутыми.
- По столбцам: объединение ячеек вертикально, с удалением горизонтальных линий сетки; вертикальные линии сетки остаются нетронутыми.
Панель: Таблица
Контекстное меню: Выберите ячейку или диапазон ячеек и щелкните на выбранных ячейках правой кнопкой мыши. Щелкните на пункте «Объединить» и выберите способ объединения.
Объединение таблиц
В dwg файле есть много однотипных автокадовских таблиц кабельного журнала. Т.е. скажем 20 таблиц, состоящих из 5 колонок, количество строк и их содержимое различаются.
Есть ли в природе скрипт, позволяющий объединить их вертикально в одну? Т.е. чтобы получилась одна большая таблица из этих 5 колонок.
Конечно, можно попробовать руками или возиться с объединением через экспорт в Excel, но хочется автоматизировать этот процесс.
Последний раз редактировалось ElectricSib, 12.08.2016 в 07:22 .
Просмотров: 17624
ElectricSib |
Посмотреть профиль |
Найти ещё сообщения от ElectricSib |
LISP, C# (ACAD 200[9,12,13,14])
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
И в чем собственно трудность? Читаешь таблицы, получаешь оттуда данные, фильтруешь как надо, объединяешь — и выводишь в результирующую таблицу. В каком конкретно месте проблема? И где код?
__________________
Моя библиотека lisp-функций
—
Обращение ко мне — на «ты».
Все, что сказано — личное мнение.
Кулик Алексей aka kpblc |
Посмотреть профиль |
Посетить домашнюю страницу Кулик Алексей aka kpblc |
Найти ещё сообщения от Кулик Алексей aka kpblc |
Регистрация: 03.11.2015
Сообщений: 37
Сообщение от Кулик Алексей aka kpblc
И в чем собственно трудность? Читаешь таблицы, получаешь оттуда данные, фильтруешь как надо, объединяешь — и выводишь в результирующую таблицу. В каком конкретно месте проблема? И где код?
Проблема в том, что я не программист и лиспом не владею. Возможно такой скрипт уже существует и известен кому-либо из пользователей.
ElectricSib |
Посмотреть профиль |
Найти ещё сообщения от ElectricSib |
LISP, C# (ACAD 200[9,12,13,14])
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
Тогда тема точно не в том разделе — либо в «Поиск исполнителей», либо в «Поиск литературы»
__________________
Моя библиотека lisp-функций
—
Обращение ко мне — на «ты».
Все, что сказано — личное мнение.
Кулик Алексей aka kpblc |
Посмотреть профиль |
Посетить домашнюю страницу Кулик Алексей aka kpblc |
Найти ещё сообщения от Кулик Алексей aka kpblc |
Регистрация: 20.03.2008
Сообщений: 2,653
А действительно ли надо их объединять? Для какой цели, интересно? Может, достаточно просто совместить обычным переносом верх второй с низом первой (и так далее), удалив шапки у всех, кроме первой?
LISP, C# (ACAD 200[9,12,13,14])
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
Или выгнать в Excel, там обработать, и обратно в чертеж.
__________________
Моя библиотека lisp-функций
—
Обращение ко мне — на «ты».
Все, что сказано — личное мнение.
Кулик Алексей aka kpblc |
Посмотреть профиль |
Посетить домашнюю страницу Кулик Алексей aka kpblc |
Найти ещё сообщения от Кулик Алексей aka kpblc |
Регистрация: 03.11.2015
Сообщений: 37
Сообщение от Кулик Алексей aka kpblc
Или выгнать в Excel, там обработать, и обратно в чертеж.
Этот вариант я уже упоминал в шапке темы. Слишком долго экспортировать каждую из десятков таблиц в Excel, затем вручную копировать их там в один файл, чтобы посчитать некоторые суммарные показатели. Я предполагал, что есть скрипты наподобие тех, что объединяют несколько text в MText, затем итоговую таблицу уже можно было бы экспортировать в Excel для подсчетов. Похоже, такой скрипт есть в ToolPack от Dotsoft.com, но он оказался небесплатным.
Последний раз редактировалось ElectricSib, 12.08.2016 в 08:07 .
ElectricSib |
Посмотреть профиль |
Найти ещё сообщения от ElectricSib |
Регистрация: 03.11.2015
Сообщений: 37
В общем, я нашел на англоязычном форуме нужный скрипт, хоть и с тормозами, но работает:
(defun C:MTB (/ col cols1 cols2 lastrow response rows1 rows2 ss start tblobj1 tblobj2 x) (or (vl-load-com)) (princ "\n*** Select both tables ***") (if (and (setq ss (ssget (list (cons 0 "ACAD_TABLE")))) (equal 2 (sslength ss))) (progn (setq tblobj1 (vlax-ename->vla-object (ssname ss 0)) rows1 (vla-get-rows tblobj1) tblobj2 (vlax-ename->vla-object (ssname ss 1)) rows2 (vla-get-rows tblobj2) lastrow rows2 cols1 (vla-get-columns tblobj1) cols2 (vla-get-columns tblobj2) ) (if (not (equal cols1 cols2)) (progn (alert "There is not equivalent number of rows found. Error. ") (exit) (princ) ) ) (if (eq :vlax-false (vla-get-titlesuppressed tblobj2)) (progn (setq lastrow (1- lastrow)) (setq start 1)) (setq start 0)) (if (eq :vlax-false (vla-get-headersuppressed tblobj2)) (progn (setq lastrow (1- lastrow)) (setq start 2)) (setq start 0)) (vla-put-RegenerateTableSuppressed tblobj1 :vlax-false) (vla-insertrows tblobj1 rows1 (vla-getrowheight tblobj1 (1- rows1)) lastrow) (repeat lastrow (setq col 0) (repeat cols1 (vla-settext tblobj1 rows1 col (vla-gettext tblobj2 start col)) (setq col (1+ col))) (setq start (1+ start)) (setq rows1 (1+ rows1))) (vla-put-RegenerateTableSuppressed tblobj1 :vlax-true) (initget 1 "Yes No") (setq response (getkword "\nAre you want to delete the second table [Y]es or [N]o : ")) (if (eq "Yes" response) (vla-delete tblobj2) ) (mapcar (function (lambda (x) (vl-catch-all-apply (function (lambda () (vlax-release-object x)))))) (list tblobj2 tblobj1) ) ) (alert "Or nothing selected or selected more than 2 tables. Error. ") ) (princ) ) (princ "\n >> Start command with MTB to merge tables") (princ) ;;=====================================================;;
Из минусов — он не сохраняет объединение ячеек добавляемой таблицы, но это не критично.
Кроме того, скрипт позволяет объединять только 2 таблицы, насколько сильно нужно изменить его код, чтобы можно было объединять несколько таблиц, выбрав их мышкой?
MERGE TWO TABLES.LSP (1.9 Кб, 224 просмотров) |
Последний раз редактировалось ElectricSib, 16.08.2016 в 04:58 .
ElectricSib |
Посмотреть профиль |
Найти ещё сообщения от ElectricSib |
Регистрация: 11.05.2005
Сообщений: 6,991
Сообщение от ElectricSib
насколько сильно нужно изменить его код, чтобы можно было объединять несколько таблиц, выбрав их мышкой?
(defun C:MTB3 (/ col cols1 cols2 lastrow response rows1 rows2 ss start tblobj1 tblobj2 x) (vl-load-com) (princ "\n*** Select First table ***") (if (setq ss (ssget "_:S:E:L" '((0 . "ACAD_TABLE")))) (setq tblobj1 (vlax-ename->vla-object (ssname ss 0))) ) (if (and tblobj1 (princ "\n*** Select other tables ***") (setq ss nil ss (ssget "_:L" '((0 . "ACAD_TABLE")))) (or (ssdel (vlax-vla-object->ename tblobj1) ss) t) (> (sslength ss) 0) ) (progn (foreach tblobj2 (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))) (setq rows1 (vla-get-rows tblobj1) tblobj2 (vlax-ename->vla-object tblobj2) rows2 (vla-get-rows tblobj2) lastrow rows2 cols1 (vla-get-columns tblobj1) cols2 (vla-get-columns tblobj2) ) (if (not (equal cols1 cols2)) (progn (alert "There is not equivalent number of rows found. Error. ") (exit) (princ) ) ) (if (eq :vlax-false (vla-get-titlesuppressed tblobj2)) (progn (setq lastrow (1- lastrow)) (setq start 1)) (setq start 0)) (if (eq :vlax-false (vla-get-headersuppressed tblobj2)) (progn (setq lastrow (1- lastrow)) (setq start 2)) (setq start 0)) (vla-put-RegenerateTableSuppressed tblobj1 :vlax-false) (vla-insertrows tblobj1 rows1 (vla-getrowheight tblobj1 (1- rows1)) lastrow) (repeat lastrow (setq col 0) (repeat cols1 (cond ((eq (vla-GetCellType tblobj2 start col) acBlockCell) (vla-SetCellType tblobj1 rows1 col acBlockCell) (vla-setcellalignment tblobj1 rows1 col (vla-getcellalignment tblobj2 start col)) (vla-setblockscale tblobj1 rows1 col (vla-getblockscale tblobj2 start col)) (if (and (wcmatch (getenv "PROCESSOR_ARCHITECTURE") "*64*") (vlax-method-applicable-p tblobj1 'getblocktablerecordid32) ) (vla-setblocktablerecordid32 tblobj1 rows1 col (vla-getblocktablerecordid32 tblobj2 start col) :vlax-false ) (vla-setblocktablerecordid tblobj1 rows1 col (vla-getblocktablerecordid tblobj2 start col) :vlax-false ) ) ) ((eq (vla-GetCellType tblobj2 start col) acTextCell) (vla-setcellalignment tblobj1 rows1 col (vla-getcellalignment tblobj2 start col)) (vla-SetCellTextHeight tblobj1 rows1 col (vla-GetCellTextHeight tblobj2 start col)) (vla-SetCellTextStyle tblobj1 rows1 col (vla-GetCellTextStyle tblobj2 start col)) (vla-settext tblobj1 rows1 col (vla-gettext tblobj2 start col)) ) (t nil) ) (setq col (1+ col))) (setq start (1+ start)) (setq rows1 (1+ rows1))) (vla-put-RegenerateTableSuppressed tblobj1 :vlax-true) ) (initget 1 "Yes No") (setq response (getkword "\nAre you want to delete the tables [Yes/No] : ")) (if (eq "Yes" response) (mapcar 'vla-delete (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))) ) ;;; (mapcar (function (lambda (x) ;;; (vl-catch-all-apply ;;; (function (lambda () ;;; (vlax-release-object x)))))) ;;; (list tblobj2 tblobj1) ;;; ) ) (alert "nothing selected or selected less than 2 tables. Error. ") ) (princ) ) (princ "\n >> Start command with MTB3 to merge tables") (princ)
Проект СПДС
Как связать две таблицы СПДС GraphiCS в одном чертеже, чтобы можно было использовать итоговые значения из первой во второй таблице?
Для связи итоговых данных первой таблицы со второй, откройте вторую в табличной редакторе СПДС GraphiCS.
В режиме редактирования ячейки нажмите SHIFT+F2 . Через команду «присоединить объект» выберите первую таблицу. Имя свойства в формуле исправить вручную: =Object1.»A1″ .
Следует учитывать отсутствие переиндексации.
Группы вопросов: Таблицы
Применимо к: СПДС GraphiCS 2024
Задайте свой вопрос
- Новости
- Новости проекта
- Новости САПР
- СПДС GraphiCS
- СПДС Стройплощадка
- СПДС Металлоконструкции
- СПДС Железобетон
- nanoCAD СПДС
- nanoCAD СПДС Стройплощадка
- nanoCAD СПДС Железобетон
- nanoCAD СПДС Металлоконструкции
- Статьи о СПДС
- Опыт использования
- История
- СПДС GraphiCS
- СПДС GraphiCS Enabler
- СПДС Стройплощадка
- СПДС Металлоконструкции
- СПДС Железобетон
- Утилиты, дополнения
- Библиотеки
- Официальная лицензия
- Прайс-лист
- Заявка на приобретение
- Обучение
- Услуги
- Онлайн руководство
- Блог проекта
- Вопросы и ответы
- Нормативы
- Обучающие примеры
- Инструкции
- Презентации
- Видеоролики с YouTube
- Совместимость
Задайте вопрос менеджеру по СПДС GraphiCS
Copyright © 2007-2024 АО «СиСофт Девелопмент»Как вставить таблицу Excel в AutoCAD и настроить связь данных
Очевидно, что работать с таблицами удобнее в 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 импортирует и перезапишет изменённые данные в связанной таблице.