)
appsession )
经常用到的除了新建文件外还有打开现有的工作簿。示例4演示了怎样作为函数来调用实现该功能。注意文件名参数必须在调用该函数前检查过是存在的。
你可能也同时注意到了在这个示例中使用了(vlax-get-or-create-object)来代替在示例3中使用的(vlax-create-object)。这是一个历史学家独特的函数,在 Visual LISP程序中可能会经常不太注意到它。它会尝试获取现有的进程对象,如果找不到或失败,则会尝试新建一个。
它虽然价值不高,但它却能节省你键入好多的代码。如果你只想新建一个进程或只想取得现有的进程,你可以只将其替换为 (vlax-get-object) 或 (vlax-create-object) 。
Figure 4: 打开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
相关推荐: