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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как добавлять данные из MSExcel в lisp

Как добавлять данные из MSExcel в lisp

Ответ
Поиск в этой теме
Непрочитано 15.05.2013, 07:00 #1
Как добавлять данные из MSExcel в lisp
ZEN
 
Регистрация: 15.05.2013
Сообщений: 3

Добрый день.
Autocad начал изучать не так давно, так что прошу понять и обьяснить
Дали задание в институте:
Написать модуль в лиспе, который рисует цилиндры в Autocad, используя данные из таблицы MS Excel.
А точнее: (command "_cylinder" "25,50,10" "5" "90" ), как присвоить в лиспе каждому значению свой столбец из Excel

Вложения
Тип файла: rar WinRAR archive.rar (7.0 Кб, 48 просмотров)

Просмотров: 3542
 
Непрочитано 15.05.2013, 07:30
#2
trir


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


http://private.peterlink.ru/poleshch...6/Razr2006.htm
http://private.peterlink.ru/poleshch.../Alisp2006.htm
trir вне форума  
 
Непрочитано 15.05.2013, 08:20
#3
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Проще макрос прям в экселе записать и через буфер (ctrl+c, ctrl+v) вставить в комстроку.
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 15.05.2013, 10:57
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от ZEN Посмотреть сообщение
Написать модуль в лиспе, который рисует цилиндры в Autocad, используя данные из таблицы MS Excel.
А точнее: (command "_cylinder" "25,50,10" "5" "90" )
За эту адскую смесь рисования командными методами и получения данных из экселя - преподавателю надо руки вместе с ногами оторвать.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 15.05.2013, 11:05
#5
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
ширина цилиндра
без всяких липсов можно обойтись
gomer вне форума  
 
Непрочитано 15.05.2013, 11:28
#6
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


ZEN, лови прогу. Открыть приложенный файл exel, выделить 3 ячейки G2:G4, скопировать в буфер обмена. Открыть AutoCAD, поставить курсор в комстроку, вставить содержимое буфера. Будут построены три цилиндра.
Вложения
Тип файла: rar Цилиндры.rar (3.6 Кб, 79 просмотров)
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Автор темы   Непрочитано 15.05.2013, 13:49
#7
ZEN


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


Krieger спасибо, но как заметил Дима_ , все намного ужаснее, нужно именно через прогу в лиспе их нарисовать.
Нашел тему http://forum.dwg.ru/showthread.php?t=8858 (раньше не заметил) но там таблица в блокноте, есть символы-разделители
А как через лисп обращатся к столбам и строчкам в excel?
ZEN вне форума  
 
Непрочитано 15.05.2013, 14:09
#8
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


задача на лиспе решается элементарно в 4 строки
gomer вне форума  
 
Непрочитано 15.05.2013, 15:47
#9
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Цитата:
Сообщение от gomer Посмотреть сообщение
задача на лиспе решается элементарно в 4 строки
Может продемонстрируешь?
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Непрочитано 15.05.2013, 16:07
#10
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Вообще-то, всё решается гораздо проще, без какого-либо программирования: файл Excel нужно сохранить как "Текст (MS-DOS) (*.txt)". Затем у созданного файла меняем расширение с xls на src и всё - задача решена. Полученный скрипт запускается в AutoCAD командой _script и рисует все цилиндры. Меня несколько пугает настораживает уровень знаний "преподавателей", дающих столь "полезные" задания...
Цитата:
Сообщение от ZEN
прошу понять и обьяснить
Тогда уж так:
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 15.05.2013 в 16:21.
hwd вне форума  
 
Непрочитано 15.05.2013, 18:03
#11
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Krieger Посмотреть сообщение
Может продемонстрируешь?
Даже не собираюсь, но суть метода в том, что xlsx для такой задачи слишком мерседес, достаточно csv, а не src .
gomer вне форума  
 
Непрочитано 15.05.2013, 22:45
#12
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Offtop: После домашнего ужина решил пошалить:
Выделяешь в экселе три столбца ячеек в формате по аналогу |25,50,10|5|90|, в начале сеанса автокада вводишь (vl-load-com) и для рисования цилиндров по выбранным параметрам копируешь в ком. строку 1 строкой:
(vlax-for row (vlax-get-property (vlax-get-property (vlax-get-object "Excel.Application") 'selection) 'rows) (apply 'command (cons "_cylinder" (mapcar 'vlax-variant-value (car (vlax-safearray->list (vlax-variant-value (vlax-get-property row 'value)))))))) - как это оформить в виде программы и что из этого ты объяснишь преподу - это меня уже не волнует.
з.ы. ой - файл не посмотрел там-же 5 столбцов (xyz->x,y,z):
(vlax-for row (vlax-get-property (vlax-get-property (vlax-get-object "Excel.Application") 'selection) 'rows)
(apply 'command (cons "_cylinder" ((lambda (lst) (cons (list (car lst) (cadr lst) (caddr lst)) (cdddr lst)))
(mapcar 'vlax-variant-value (car (vlax-safearray->list (vlax-variant-value (vlax-get-property row 'value)))))))))
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 15.05.2013 в 23:26.
Дима_ вне форума  
 
Непрочитано 22.05.2013, 21:43
1 | #13
Golem-iq

студент
 
Регистрация: 03.03.2012
Москва
Сообщений: 50


Возможно умные и умеющие люди меня обругают, но я для работы с Excel использую следующий кусок кода + готовый файл с методами (скачано с просторов данного форума (скорее всего =) )).
ЗЫ: я тебе скину кусок из своей программы, надеюсь поможет. IN_EXCEL-Write - это запись в эксель, IN_EXCEL-Read - считывание.




Код:
[Выделить все]
 

(defun C:EXM ( / DESRNG EXCELAPP FILEPATH NEXTRNG SELRNG SHT SHTNUM WBK stroka colon)
  (setq FilePath (getfiled    "Выберите файл с прайсами :"
         (getvar "dwgprefix")
             "xlsx"
             16
             )
  )
;;;  (setq FilePath (findfile "C:\\AUTOLISP\\TEST1.xls"));for debug only
  (setq ShtNum (getstring t "\nВведите имя листа <Лист1>: \n"))
  (if (eq ShtNum "")
    (setq ShtNum "Лист1")
  )
  (setq ExcelApp (vlax-get-or-create-object "Excel.Application"))
  (vla-put-visible ExcelApp :vlax-true)
  (setq Wbk (vl-catch-all-apply 'vla-open (list (vlax-get-property ExcelApp "WorkBooks") FilePath)))
  (vlax-invoke-method Wbk 'Activate)
  (setq Sht (vl-catch-all-apply 'vlax-get-property (list (vlax-get-property Wbk "Sheets") "Item" ShtNum)))
  (vlax-invoke-method Sht "Activate")

  ;; <действия в файле>
  (IN_WRITE-EXCEL 3 23 (/ qob 1000))
  (IN_WRITE-EXCEL 3 24 (/ qob 1000))
  (setq stroka 1
        colon 1
    i 4
    ind 1
    listob nil
  )
  (while (< i 777)
    (setq stroka i)
    ;(setq el1 (caddr (car (IN_READ-EXCEL Stroka Colon Param))))
    (setq el3 (car (IN_READ-EXCEL Stroka  25 Param)))
    (if (and (/= el3 "") (/= el3 "0"))
      (progn
        (setq el2 (car (IN_READ-EXCEL Stroka 1 Param)))
        (if (/= el2 "")
      (progn
        (setq el1 ind    
              el4 (car (IN_READ-EXCEL Stroka 19 Param))
              el5 (car (IN_READ-EXCEL Stroka 4 Param))
              el6 (car (IN_READ-EXCEL Stroka 5 Param))
              el7 (car (IN_READ-EXCEL Stroka 18 Param))
          el8 (car (IN_READ-EXCEL Stroka 36 Param))
          el9 (car (IN_READ-EXCEL Stroka 37 Param))
                  el10 (car (IN_READ-EXCEL Stroka 18 Param)) 
                  el (list el1 el2 el4 el5 el6 el7 el8 el9 el10)        
                  listob (reverse (cons el (reverse listob)))
          ind (1+ ind)
        )
      )
          (setq i 778)
        )
      )
      (if (= el3 "")
       (setq i 788)
      )
    )
    (setq i (1+ i))
  )

  (setq i1 6
    listdiastand nil
  )
  (while (< i1 777)
    (setq el (car (IN_READ-EXCEL i1 27 Param)))
    (if (= el "")
      (setq i1 778)
      (setq listdiastand (reverse (cons (atoi el) (reverse listdiastand))))
    )
    (setq i1 (1+ i1))    
  )

  
  ;; <действия в файле> 
  (vl-catch-all-apply 'vlax-invoke-method (list Wbk "Close" :vlax-true))
  (vl-catch-all-apply 'vlax-invoke-method (list ExcelApp "Quit"))
  (mapcar
    (function (lambda (x)
        (if (not (vlax-object-released-p x))
          (vlax-release-object x)
        )
          )
    )
    (list DesRng NextRng SelRng Sht Wbk ExcelApp); обязательно в обратном порядке
  )
  (setq    DesRng nil
    NextRng nil
    SelRng nil
    Sht nil
    Wbk nil
    ExcelApp nil
  )
  (gc)
  (gc)
  (gc)
  (prin1)
)

Golem-iq вне форума  
 
Автор темы   Непрочитано 23.05.2013, 06:48
#14
ZEN


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


Спасибо Golem-iq, как раз то что нужно, буду разбираться=)
ZEN вне форума  
 
Непрочитано 23.05.2013, 12:22
#15
Golem-iq

студент
 
Регистрация: 03.03.2012
Москва
Сообщений: 50


Цитата:
Сообщение от ZEN Посмотреть сообщение
Спасибо Golem-iq, как раз то что нужно, буду разбираться=)
Рад был помочь
Golem-iq вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как добавлять данные из MSExcel в lisp

Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Как взять данные с интернет страницы? LastGraff LISP 20 03.07.2024 17:19
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33
Lisp и данные paha LISP 9 26.08.2004 14:49