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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Передача из Excel в AutoCAD

Передача из Excel в AutoCAD

Ответ
Поиск в этой теме
Непрочитано 28.03.2009, 07:45 #1
Передача из Excel в AutoCAD
Лентяй
 
Project Engineer
 
Лос Анджелес
Регистрация: 05.01.2005
Сообщений: 1,392

Дано: Excel матрица размером 118х112.
Требуется: Построить список из списков по строкам. При посторении списков применяются несложные функции анализа значений ячеек, типа "если "Х", то пишем, а если нет - то игнорируем. Для каждого "Х" формируется строка - элемент списка. Написал для этого ActiveX-прогу на полсотни строк.
Наблюдается: Обработка матрицы занимает 40 минут. С одной стороны - долго, с лругой - всего 180 мкс на ячейку. При этом построетние массива из блоков (примерно 400 штук), значения атрибутов которых равны элементам списков занимает 5 сек.
Вопрос: Это нормально, или как?
Просмотров: 3824
 
Непрочитано 28.03.2009, 09:06
#2
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Не уверен, что правильно понял объяснение, но 40 минут это не нормально. Покажи пример файла и правила обработки.
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 01.04.2009, 16:45
#3
Rus2007


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


Help! Есть в Excelе числа в столбике. Числа надо вставить в Асad текстом в строчку с определенным интервалом. Причем одно число один текст.

Последний раз редактировалось Rus2007, 01.04.2009 в 16:57.
Rus2007 вне форума  
 
Непрочитано 01.04.2009, 23:11
#4
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Help! Есть в Excelе числа в столбике. Числа надо вставить в Асad текстом в строчку с определенным интервалом. Причем одно число один текст.
Открываешь Эксель
Выделяешь столбец с цифирью
Сворачиваешь Эксель
Открываешь Автокад или если уже открыт
просто в него заходишь
Жмешь батон MTEXT
Указываешь прямоугольник
В окне редактора правый клик мышью -> вставить
Закрываешь с сохранением как обычно
Заходишь в меню Modify
Выбираешь МТекст
Задаешь LineSpacing Factor какой нужно
Жмешь Enter и выходишь
Потом взрываешь МТекст
Вынимаешь кошелек
Закрываешь сумочку

~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 07.04.2009, 01:21
#5
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
Не уверен, что правильно понял объяснение, но 40 минут это не нормально. Покажи пример файла и правила обработки.
Вот тебе лисп:
Код:
[Выделить все]
(defun C:EMNumbV (/ adoc msp ass util bks kw exl ex_fl wbook shts csht cls pm p q r lst0)
  (vl-load-com)
  (setq adoc (vla-get-ActiveDocument (vlax-get-acad-object)))
  (mapcar '(lambda (x y) (set x (vlax-get-property adoc y))) '(msp util bks)
	    '(ModelSpace Utility Blocks))
  (vla-endundomark adoc)
  (vla-startundomark adoc)
  (vla-InitializeUserInput util 128 "Old New")
  (setq kw (vla-getKeyWord util "\nOpen Excel File [New/Old] <Old>: "))
  (if (= kw "") (setq kw "Old"))
  (vla-InitializeUserInput util 128 "Pumps Valves")
  (setq kw (vla-getKeyWord util "\nSelct Worksheet [Pumps/Valves] <Pumps>: "))
  (if (= kw "") (setq kw "Pumps"))
  (if (= kw "Pumps") (setq csht_nm "Pumps" pm 161) (setq csht_nm "Shutdowns" pm 163))  
  (if (setq exl (vlax-get-or-create-object "Excel.Application.11")) (progn
    (setq ex_fl (if (or (= kw "New") (null ex_fl)) (getfiled "Select Excel File" "Z:/AlexeyS/Hankook/P&ID/" "XLS" 16) ex_fl)
	  Wbook (vlax-invoke-method (vlax-get-property exl 'workbooks) 'open ex_fl)
	  shts (vlax-get-property Wbook 'worksheets)
	  csht (vlax-get-property shts 'Item csht_nm)
	  cls (vlax-get-property csht 'cells));setq
    (vlax-invoke-method csht 'Activate)
    (if (= (vlax-get-property exl 'visible) :vlax-false) (vlax-put-property exl 'visible :vlax-true)));progn
    (progn (alert "Excel Can't Start!") (exit)));if
  (setq sel (vlax-get-property exl 'Selection) r (vlax-get-property sel 'column) q r
	cpt0 (vlax-safearray->list (vlax-variant-value (vla-getPoint util nil "Enter Insertion Point"))))
  (while (< q (+ r (vlax-get-property (vlax-get-property sel 'columns) 'count)))
    (setq p (vlax-get-property sel 'row))
    (while (null (val p q)) (setq q (1+ q)))
    (setq lst0 (list (val p q)))
    (while (<= p pm) (setq n (if (null (val p 5)) 0 (fix (val p 5))) c 6)
      (if (= (val p q) "X")
	(progn (while (<= c q) (if (and (not (vl-catch-all-error-p (vl-catch-all-apply 'val (list p c))))
					(= (val p c) "X"))
				 (setq n (1+ n) c (1+ c)) (setq c (1+ c))));while
	  (setq lst0 (cons (strcat (if (null (val p 4)) " " (val p 4)) "." (itoa n)) lst0)
		p (1+ p)));progn
	(setq p (1+ p))));while
    (setq lst0 (reverse (vl-remove-if '(lambda (x) (= (substr x 1 1) " ")) lst0))
	  lst (cons lst0 lst)
	  q (1+ q)));while
  (setq lst (reverse lst))
  (mapcar '(lambda (x) (vlax-release-object x)) (list sel csht cls wbook exl))
  (vla-endundomark adoc)
  (gc)
);end
;
(defun val (row col / wars)
  (setq vars (mapcar 'vlax-make-variant (list row col)))
  (vlax-variant-value (vlax-get-property (vlax-variant-value
		(vlax-get-property cls 'item (car vars) (cadr vars))) "Value2"))
);defun
И вот тебе файл:
Вложения
Тип файла: zip IO Matrix.zip (134.9 Кб, 101 просмотров)
Лентяй вне форума  
 
Непрочитано 07.04.2009, 15:39
#6
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Лентяй,
моя старенькая программка:
Код:
[Выделить все]
(defun GET_xl_sheet (tbl sheet / ADOCONNECT ADORECORDSET C I i1)
  ;;     by Elpanov Evgeny
  ;;     elpanov@gmail.com
  ;;
;;(GET_xl_sheet "D:\\3.xls" "Pumps")
 (vl-load-com)
  (setq
    ADOConnect   (vlax-get-or-create-object "ADODB.Connection")
    ADORecordset (vlax-get-or-create-object "ADODB.Recordset")
  ) ;_  setq
  (if (not
        (vl-catch-all-error-p
          (vl-catch-all-apply
            (function vlax-invoke-method)
            (list
              ADOConnect
              "Open"
              (strcat
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
                tbl
                ";Extended Properties=;Excel 8.0;HDR=No"
              ) ;_  strcat
              "admin"
              ""
              nil
            ) ;_  list
          ) ;_  vl-catch-all-apply
        ) ;_  vl-catch-all-error-p
      ) ;_  not
    (progn
      (if (member
            (strcat sheet "$")
            (caddr
              (mapcar
                (function
                  (lambda (a)
                    (mapcar
                      (function vlax-variant-value)
                      a
                    ) ;_  mapcar
                  ) ;_  lambda
                ) ;_  function
                (vlax-safearray->list
                  (vlax-variant-value
                    (vlax-invoke-method
                      (vlax-invoke-method
                        ADOConnect
                        "OpenSchema"
                        4
                      ) ;_  vlax-invoke-method
                      "GetRows"
                      65535
                    ) ;_  vlax-invoke-method
                  ) ;_  vlax-variant-value
                ) ;_  vlax-safearray->list
              ) ;_  apply
            ) ;_ caddr
          ) ;_ member
        (progn
          (vlax-invoke-method
            ADORecordset
            "Open"
            (strcat "SELECT * FROM [" sheet "$]")
            ADOConnect
            1
            3
            nil
          ) ;_  vlax-invoke-method
          (if (> (progn
                   (setq
                     i (length
                         (car
                           (vlax-safearray->list
                             (vlax-variant-value
                               (vlax-invoke-method
                                 ADORecordset
                                 "GetRows"
                                 65536
                               ) ;_  vlax-invoke-method
                             ) ;_  vlax-variant-value
                           ) ;_  vlax-safearray->list
                         ) ;_  car
                       ) ;_ length
                   ) ;_  setq
                   (vlax-invoke-method ADORecordset "Close")
                   i
                 ) ;_ progn
                 0
              ) ;_ >
            (progn
              (setq i1 1)
              (while (vl-catch-all-error-p
                       (vl-catch-all-apply
                         (function vlax-invoke-method)
                         (list
                           ADORecordset
                           "Open"
                           (strcat "SELECT * FROM [" sheet "$a" (itoa i1) ":IV" (itoa i1) "]")
                           ADOConnect
                           1
                           3
                           nil
                         ) ;_ list
                       ) ;_ vl-catch-all-apply
                     ) ;_ vl-catch-all-error-p
                (setq i1 (1+ i1))
              ) ;_ while
              (vlax-invoke-method ADORecordset "Close")
              (setq i (+ i i1))
              (while (>= i i1)
                (if (not
                      (vl-catch-all-error-p
                        (vl-catch-all-apply
                          (function vlax-invoke-method)
                          (list
                            ADORecordset
                            "Open"
                            (strcat "SELECT * FROM [" sheet "$a" (itoa i) ":IV" (itoa i) "]")
                            ADOConnect
                            1
                            3
                            nil
                          ) ;_ list
                        ) ;_ vl-catch-all-apply
                      ) ;_ vl-catch-all-error-p
                    ) ;_ not
                  (progn
                    (setq
                      c (cons
                          (car
                            (apply
                              (function mapcar)
                              (cons
                                'list
                                (mapcar
                                  (function
                                    (lambda (a)
                                      (mapcar
                                        (function
                                          (lambda (b)
                                            (vlax-variant-value b)
                                          ) ;_  lambda
                                        ) ;_  function
                                        a
                                      ) ;_  mapcar
                                    ) ;_  lambda
                                  ) ;_  function
                                  (vlax-safearray->list
                                    (vlax-variant-value
                                      (vlax-invoke-method
                                        ADORecordset
                                        "GetRows"
                                        65535
                                      ) ;_  vlax-invoke-method
                                    ) ;_  vlax-variant-value
                                  ) ;_  vlax-safearray->list
                                ) ;_  mapcar
                              ) ;_  cons
                            ) ;_  apply
                          ) ;_  car
                          c
                        ) ;_  cons
                      i (1- i)
                    ) ;_  setq
                    (vlax-invoke-method ADORecordset "Close")
                  ) ;_ progn
                  (setq i (1- i))
                ) ;_ if
              ) ;_  while
;;;              (setq c (if (equal c '((nil) (nil)))
;;;                        (list sheet)
;;;                        (cons sheet c)
;;;                      ) ;_  if
;;;              ) ;_ setq
            ) ;_ progn
          ) ;_ if
        ) ;_ progn
      ) ;_ if
      (vlax-invoke-method ADOConnect "Close")
      (vlax-release-object ADORecordset)
      (vlax-release-object ADOConnect)
      (setq ADORecordset nil
            ADOConnect   nil
      ) ;_  setq
      c
    ) ;_  progn
    (progn
      (vl-catch-all-apply
        'vlax-invoke-method
        (list ADOConnect "Close")
      ) ;_  vl-catch-all-apply
      (vlax-release-object ADORecordset)
      (vlax-release-object ADOConnect)
      (setq ADORecordset nil
            ADOConnect   nil
      ) ;_  setq
      nil
    ) ;_  progn
  ) ;_  if
)
при запуске с аргументами:
(GET_xl_sheet "D:\\3.xls" "Pumps")
за несколько секунд возвращает список:
Вложения
Тип файла: lsp 3-list.lsp (34.6 Кб, 68 просмотров)
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 08.04.2009, 10:14
#7
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Ну, во-первых, список типа "всенах" мне не нужен, поскольку вся изюмина - в отфильтровывании пустых ячеек. Во вторых - требуется указать обрабатываемый ряд. так что единственное, хотя, м.б. и главное отличие - это связь не через интерфейс Excel'а, а через ADOBD. В этом, что-ли все ускорение? Кстати, я заметил, что если перетаскивать в АвтоКАД информацию поячеечено, а не списком, то получается не 40 минут, а много дольше. EXCEL из-под КАДа тормозит?
Лентяй вне форума  
 
Непрочитано 08.04.2009, 11:32
#8
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Лентяй, жаль, у меня не работает твоя программа, в виде как есть. Времени на разбор, у меня пока нет. Скажи своими словами, что именно надо сделать в акаде, используя данные из таблицы?
ps. Если хочешь, сделаю пример с созданием упорядоченного размещения крестиков в акаде...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Автор темы   Непрочитано 14.04.2009, 10:54
#9
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Программа может не работать по следующим причинам:
1. Она - узко утилитарная и образует список контактов реле ЕМ, управляющих соотв. клапаном XV. Поэтому выбирать в EXCEL'е нужно сугубо из ячеек ряда со значениями XV-......
2. В выборке не должно быть пустых клеток.
3. Она - просто стерва.
4. Любая другая причина, кроме изложенных выше.
Лентяй вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Передача из Excel в AutoCAD



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таблицы из Excel в AutoCAD вставляются неполностью Nikolay_N AutoCAD 23 07.09.2019 21:12
связь текстовых полей AutoCad с ячейками в Excel April AutoCAD 9 29.06.2014 12:35
Расчетная мощь MS Excel в AutoCAD dive Расчетные программы 1 28.03.2009 07:48
вставка в autocad ссылки на excel nicolas Программирование 5 16.10.2008 19:18
Нет ли у кого ивритского шрифта? (из EXCEL в AutoCAD) Grinzaid AutoCAD 1 26.12.2003 22:25