Visual LISP与Excel电子表格 联系客服

发布时间 : 星期一 文章Visual LISP与Excel电子表格更新完毕开始阅读04fc8f323968011ca30091cb

)

appsession )

经常用到的除了新建文件外还有打开现有的工作簿。示例4演示了怎样作为函数来调用实现该功能。注意文件名参数必须在调用该函数前检查过是存在的。

你可能也同时注意到了在这个示例中使用了(vlax-get-or-create-object)来代替在示例3中使用的(vlax-create-object)。这是一个历史学家独特的函数,在 Visual LISP程序中可能会经常不太注意到它。它会尝试获取现有的进程对象,如果找不到或失败,则会尝试新建一个。

它虽然价值不高,但它却能节省你键入好多的代码。如果你只想新建一个进程或只想取得现有的进程,你可以只将其替换为 (vlax-get-object) 或 (vlax-create-object) 。

Figure 4: 打开Excel 并在其中打开现有的文档文件

;;; 注意: 必须为全路径文件名,

;;; 可以设为 \显示)或 \隐藏),它取决于你希望 ;;; Excel 进程是否可以让用户直接操作访问。

(defun DSX-Open-Excel-Exist (xfile dmode / appsession) (princ \打开 Excel 电子表格文件...\(cond

( (setq fn (findfile xfile)) (cond

( (setq appsession (vlax-get-or-create-object \(vlax-invoke-method

(vlax-get-property appsession 'WorkBooks)

'Open fn )

(if (= (strcase dmode) \(vla-put-visible appsession 1) (vla-put-visible appsession 0) ) ) ) )

( T (alert (strcat \不能找到指定的文件: \)

appsession )

现在你已经打开了工作簿并进入活动的工作表中,你肯定还想进一步取在表中取点数据。

示例 5: 在活动的工作表中的单个单元格中获取数据

;;; 获取行 和列 范围内的单元格对象

(defun DSX-Excel-Get-Cell (rng relrow relcol) (vlax-variant-value

(msxl-get-item (msxl-get-cells rng) (vlax-make-variant relrow) (vlax-make-variant relcol) ) )

)

;;; 返回单元格(row, col)内容的值

(defun DSX-Excel-Get-CellValue (row col) (vlax-variant-value (msxl-get-value (DSX-Excel-Get-Cell

(msxl-get-ActiveSheet xlapp) row col ) ) ) )

尽管获取单个单元格的值有时是足够的,但经常情况下你会要求一次性获取一个指定行列范围内的值。这里有一些函数用于从多行、多列或单元格数组获取值。

Figure 6: 在活动的工作表中获取一定行列范围中的数据

;;;*************************************************************************

;;; 模块: DSX-Excel-Get-RowValues ;;; 描述: 返回给定行的单元格值列表 ;;; 参数: 行号(整数), 起始列, 单元格数量

;;; 样例: (DSX-Excel-Get-RowValues 3 1 20) 取得行3的前20个单元格的值

;;;*************************************************************************

(defun DSX-Excel-Get-RowValues (row startcol numcells / next out) (setq next startcol) (repeat numcells (setq out (if out

(append out (list (DSX-Excel-Get-CellValue row next))); row x col (list (DSX-Excel-Get-CellValue row next)); row x col )

next (1+ next) )

); repeat out )

;;;*************************************************************************

;;; 模块: DSX-Excel-Get-ColumnValues ;;; 描述: 返回给定列的单元格值列表 ;;; 参数: 列号(整数), 起始行, 单元格数量

;;; 样例: (DSX-Excel-Get-ColumnValues 2 1 20) 取得列2(“B”)的前20个单元格的值

;;;*************************************************************************

(defun DSX-Excel-Get-ColumnValues (col startrow numcells / next out) (setq next startrow) (repeat numcells (setq out