LISP excel 冻结拆分_[转载]Visual LISP与Excel电子表格

Microsoft Excel

在当今世界上的电子表格应用软件产品中占有绝对的统治地位。我们经常可以看到财会部门或人事部门利用它来处理日常的一些数据。虽然说

Access

在数据处理方面会比Excel好些,但它在一些简单的日常事务中象执行一些快速输入或排序时却不那么方便简单。它是一个常用的事务处理工具。

这10年来,有许多AutoCAD程序是用于将提取数据并将其输出为报告。不论什么原因,它是很必要的。近10年来所见到的除了极少部分外(如Terry

Dotson的 http://www.dotsoft.com/), 输出的机制均为输出为

ASCII文本文件,或有些是带格式文件。这是因为10年来,我们没有 Visual LISP 或 VBA

使程序与其它应用软件相连通并在相互之间传递信息。现在可以了。

如果你还一直在使用逗号或TAB分界符的文本来区分你的数据,你应该好好地看看这篇文章了。

Visual LISP (VBA也可以)

提供了必要的函数来接触和与任何提供了类型库(内部暴露API[应用程序接口程序]的应用程序相联系。通常它是VB或VBA。这一类应用程序包括

Microsoft Office (Access, Excel, Word, 还有象Outlook 和 PowerPoint),

以及象 MathCAD, Visio、Actrix等产品。

在你的代码中的第一件事就是必需在Visual LISP中加载ActiveX/COM。它是通过(vl-load-com)

函数来完成的。第一件事尝试与 Excel 连接上就是搜索Excel的类型库文件。这里使用了Excel 2000 (9.0)

作为例子。示例1演示了怎样通过Excel不同版本来取得与其类型库相关联。注意 Excel 2002

用的是可执行文件来身来代替在以往版本中所使用的分离的TLB或OLB文件。

Figure 1: 加载Excel 97 类型库

(vl-load-com)

(defun DSX-TypeLib-Excel ( / sysdrv tlb)

(setq sysdrv (getenv "systemdrive"))

(cond

( (setq tlb (findfile (strcat sysdrv "\Program Files\Microsoft

Office\Office\Excel8.olb")))

tlb

)

( (setq tlb (findfile (strcat sysdrv "\Program Files\Microsoft

Office\Office\Excel9.olb")))

tlb

)

( (setq tlb (findfile (strcat sysdrv "\Program Files\Microsoft

Office\Office\Excel10.olb")))

tlb

)

( (setq tlb (findfile (strcat sysdrv "\Program Files\Microsoft

Office\Office\Excel.exe")))

tlb

)

( (setq tlb (findfile (strcat sysdrv "\Program Files\Microsoft

Office\Office10\Excel.exe")))

tlb

)

)

)

下一步是加载类型库并定义内部接口的属性、方法和恒量。这些都可以使用任意名称的前缀,该前缀只是用于对外部应用程序的快速及合理地调用。

以下的文章内容将把类型库的前缀均置为斜体以方便区分。

示例2演示了一个简单的函数来加载类型库并判断是否成功返回T或nil:

Figure 2: 定义类型库接口

(defun DSX-Load-TypeLib-Excel ( / tlbfile tlbver out)

(cond

( (null msxl-xl24HourClock)

(if (setq tlbfile (DSX-TypeLib-Excel))

(progn

(setq tlbver (substr (vl-filename-base tlbfile) 6))

(cond

( (= tlbver "9")

(princ "n初始化 Microsoft Excel 2000...") )

( (= tlbver "8")

(princ "n初始化 Microsoft Excel 97...") )

( (= (vl-filename-base tlbfile) "Excel.exe")

(princ "n初始化 Microsoft Excel XP...")

)

)

(vlax-import-type-library

:tlb-filename tlbfile

:methods-prefix "msxl-"

:properties-prefix "msxl-"

:constants-prefix "msxl-"

)

(if msxl-xl24HourClock (setq out T))

)

)

)

( T (setq out T) )

)

out

)

现在你已经在敲Excel的门并且得到“我在家!哪位,有什么事?”这样的回答。你必须温和地回答,象“你好!我这里有一个新的文件想存些数据进来!”

示例3给出了一个简单的函数来打开 Excel

并利用缺省的工作簿(一般为3个工作表)来创建一个新的空白工作簿。工作表1将作为缺省的活动工作表。该函数返回vla-object

指向新的 Excel 进程对象。

Figure 3: 打开带有新的工作簿的 Excel</

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值