Veja como é possível comunicar dados entre o AutoCAD e o Ms-Excel utilizando o Visual Lisp.
O Visual Lisp possibilita a comunicação do AutoCAD com qualquer aplicativo que suporte o ActiveX, como um exemplo vamos demonstrar como é possível transferir informações do desenho para uma planilha do Ms-Excel.
Vale informar que este é apenas um exemplo e que o mesmo pode ser adaptado às suas necessidades.
Primeiramente devemos carregar a funçao vl-load-com que permite que utilizemos as funções ActiveX suportadas pelo Visual Lisp.
(vl-load-com)
Para o nosso exemplo as variaveis *excel-cells* e *row* devem estar com seus valores sempre nulos toda vez que a rotina for iniciada
(setq *excel-cells* nil)
(setq *row* nil)
A função init-excel irá iniciar o Excel criar uma pasta e definir janela do aplicativo como "visível".
(defun init-excel (/ excel-app wb-colletion workbook sheets sheet1)
(setq excel-app (vlax-create-object "excel.application"))
(setq wb-collection (vlax-get excel-app "workbooks"))
(setq workbook (vlax-invoke-method wb-collection "add"))
(setq sheets (vlax-get workbook "sheets"))
(setq sheet1 (vlax-get-property sheets "item" 1))
(setq *excel-cells* (vlax-get sheet1 "cells"))
(vlax-put excel-app "visible" 1))
A função write-row-column vai gravar os dados na planilha do excel; em linha e coluna informada.
(defun write-row-column (row col x)
(vlax-put-property *excel-cells* "item" row col (vl-princ-to-string x)))
Para a próxima etapa a variável *model-space* deve estar com seu valor sempre nulo.
(setq *model-space* nil)
A função init-app vai criar as colunas de cabeçalho na planilha do excel, além de amazenar o objeto da seção corrente do AutoCAD no ambiente modespace.
(defun init-app ()
(setq *model-space*
(vla-get-modelspace
(vla-get-activedocument
(vlax-get-acad-object))))
(write-row-column 1 1 "Centro x")
(write-row-column 1 2 "Centro y")
(write-row-column 1 3 "Centro z")
(write-row-column 1 4 "Raio")
(setq *row* 2))[b/]
A função seguinte aciona a função [b]write-row-column passando os parâmetros necessários e desenha os objetos (circulos) no desenho corrente e vai criar as colunas de cabeçalho na planilha do excel, além de amazenar o objeto da seção corrente do AutoCAD no ambiente "modelspace".
(defun add-circle (px py pz radius)
(write-row-column *row* 1 px)
(write-row-column *row* 2 py)
(write-row-column *row* 3 pz)
(write-row-column *row* 4 radius)
(setq *row* (+ *row* 1))
(vla-addcircle *model-space*
(vlax-3d-point px py pz )
radius))
Executando a função demo será processada toda as sequencias anteriores e consequentemente criado o arquivo do Excel com os dados já exportados do AutoCAD. (conforme figura)
(defun c:demo ()
(init-excel)
(init-app)
(add-circle 5 5 0 5)
(add-circle 5 5 0 10))