Un buen número de los snippets que verás aquí están desarrollados con Visual Lisp, debido a que este código está optimizado por el propio Autodesk. La finalidad de los snippets como te he mencionado antes es tomar estas porciones de código para usarlas en la elaboración de tus rutinas.

Lógicamente para usarlos, debes de tener conocimiento de programación con AutoLisp, si aún no lo tienes, te recomiendo que sigas estos posts que te ayudarán a aprender a programar con AutoLisp y Visual Lisp.

El siguiente snippet te ayudará a conectar tu aplicativo Lisp con Excel, obtener datos de las celdas que indiques y finalmente desconectarte de Excel.

; Funciones VL que conectan con Excel, obtienen datos de celdas y cierran Excel
 
; https://www.devcadlisp.com/
; https://mariotorres.pe/
 
; Este es un lisp en formato original, se puede ver el código fuente, la intención, es de que el código fuente
; pueda ser modificado y adaptado a la necesidad de cada usuario, se prohibe la distribución libre del mismo, dado a que le
; pertenece al autor.
;-------------------------------------------------------------------------------------------------------------------------------
 
; CODIGO FUENTE DE LA RUTINA LISP (SNIPPET).
;______________________________________________________
(vl-load-com)
 
(defun conectar-excel() 
	(setq 	RutaArch "D:\\Temp\\prueba.xlsx"
		apl-excel  (vlax-get-or-create-object "excel.application")
		col-libros (vlax-get-property apl-excel "workbooks")
		libro (vlax-invoke-method col-libros "open" RutaArch)
		col-hojas (vlax-get-property libro "sheets")
		hoja-1 (vlax-get-property col-hojas "item" 1)
		col-celdas (vlax-get-property hoja-1 "cells")
	)
	;(vla-put-visible apl-excel :vlax-true)
	(vla-put-visible apl-excel :vlax-false);Esconder excel
)
 
(defun c:nh()
	(conectar-excel) 
	(setq TextoNombreHoja (vlax-get-property hoja-1 "name"))
	(alert (strcat "Se leerá la hoja " TextoNombreHoja))
	(ObtenerValores 1) ;Empezar de la fila 1
	(desconectar-excel)
	(princ)
)
 
(defun ObtenerValores (FilaDeInicio)
	(while (/= (setq varx (vlax-variant-value (vlax-variant-change-type (vlax-get-property col-celdas "item" FilaDeInicio 1) vlax-vbstring))) "")
		(setq vary (vlax-variant-value (vlax-variant-change-type (vlax-get-property col-celdas "item" FilaDeInicio 2) vlax-vbstring)))
		(princ (strcat "(Fila: " (itoa filaDeInicio) ") Valor columna 1= " varx " | Valor columna 2= " vary "\n"))
		(setq filaDeInicio (+ filaDeInicio 1))
	)
)
 
(defun desconectar-excel() 
	(vlax-release-object col-celdas)
	(vlax-release-object hoja-1)
	(vlax-release-object col-hojas)
	(vlax-release-object col-libros)
	(vlax-invoke-method apl-excel 'QUIT)
	(vlax-release-object apl-excel)
	(gc)
)
 
(setvar "modemacro" "https://www.devcadlisp.com/")
(alert "https://www.devcadlisp.com/\nhttps://mariotorres.pe/")
(princ "\nhttps://www.devcadlisp.com/")
(princ)

Parte 1: Conectar con Excel

Si estás familiarizado con programación en otros lenguajes, podrás observar que los métodos para invocar a los objetos son parecidos con los usados aquí.

(setq apl-excel  (vlax-get-or-create-object "excel.application"))

Por ejemplo para crear el objeto application (Excel) en visual Lisp se invoca a la función “vlax-get-or-create-object“, mientras que en Visual Basic el objeto aplicación Excel (apl-excel) se crearía de la siguiente manera:

Set apl-excel = CreateObject("Excel.Application")

Luego los demás objetos se van obteniendo con las funciones “vlax-get-property” a partir del objeto “application” (aplicación), hasta llegar al mínimo dato que es el objeto “cell” (celda), que es el dato que en realidad nos interesa obtener.

La función “vla-put-visible“, invoca a la propiedad “visible” de Excel, esta propiedad permite establecer si la aplicación se cargará y se mostrará o sólo cargará pero no se verá (oculta), en este ejemplo se está estableciendo como “:vlax-false” (no se mostrará).

Parte 2: Obtener los datos de la hoja y celdas

Nombre de la hoja:

(setq TextoNombreHoja (vlax-get-property hoja-1 "name"))

Datos de celdas:

(vlax-get-property col-celdas "item" FilaDeInicio 1)

Aquí la variable “FilaDeInicio” debe tener como valor un número entero que representa el número de la fila desde la cual se comenzará a obtener los datos, el número que le sigue a esta variable indica el número de la columna (de color verde), con estos dos datos se tiene la ubicación de la celda.

Parte 3: Cerrar (descargar) Excel

La función VL que libera a los objetos almacenados en las variables es “vlax-release-object“, esta se debe de aplicar para cada variable que contenga un objeto, para el caso de la variable “apl-excel“, primero se debe de cerrar Excel con el método QUIT y luego recién se puede descargar la variable.

(defun desconectar-excel() 
	(vlax-release-object col-celdas)
	(vlax-release-object hoja-1)
	(vlax-release-object col-hojas)
	(vlax-release-object col-libros)
	(vlax-invoke-method apl-excel 'QUIT)
	(vlax-release-object apl-excel)
	(gc)
)

Escribe o copia todo el fragmento del código inicial y guárdalo en un archivo con extensión .lsp para que pruebes por ti mismo en que te puede ayudar estos fragmentos de código.