Saturday, September 12, 2009

 

OpenOffice.org宏学习笔记

http://www.vbafan.com/

从网上下载了一些关于OOs宏编程的电子书,先从Learn OpenOffice.org Spreadsheet Macro Programming(PACKT 出版,作者为Dr. Mark Alexander Bain)开始学习。

这里所有的内容都是基于Windows XP下的OpenOffice3.1版。没有安装中文版,所以菜单和对话框与中文版有些区别。

使用OOs Basic IDE

开始学习编写宏之前必需学会IDE的使用方法。这里的Basic是表示使用OOs Basic语言来编程。

和MS Excel一样,点击菜单“Tools”->“Macro”->“Organize Macros”->“OpenOffice.org Basic”可以打开IDE窗口,如下图。

在上图中我们还可以看到另外三个选项:

也就意味着除了Basic语言外,我们还可以选择另外三种语言来对OOs编程。

点击“OpenOffice.org Basic…”后,显示“OpenOffice.org Basic Macros”对话框,如下图。

在这里我们可以选择创建宏的位置,提供了三个选择:

  1. My Macros:如果我们希望所有的工作表都可以使用这个宏,可以保存在这个地方。这个宏对仅对当前用户有效,宏文件保存在Documents and Settings\current username\Application Data\OpenOffice.org\3\User\Basic下面。
  2. OpenOffice.org:如果你希望所有的用户都可以使用这个宏,可以保存在这个地方。但是当点击这个选项时,我们可以看到“New”按钮是灰色的,表示不能直接在这里创建宏。后面再介绍怎样将自定义的宏放入到这个目录供所有的用户使用。
  3. 当前工作表:将宏嵌入到工作表中的好处是你可以将文件连同宏一起复制或发送给其他人使用。

选择当前工作表Untitled 1,然后单击“New”按钮,将显示“New Module”对话框,如下图:


输入模块名称例如“ModNew”,然后单击“OK”按钮,就打开IDE窗口,如下图。在代码窗口中,OOs已经自动创建了一个Main过程,我们也可以将它删除,它的主要作用是展示一个简单的代码结构给我们。

IDE的工具

现在简单的介绍一下工具栏上的各个图标,图标标识如下图:

图标 1:运行(Run)按钮,点击这个按钮将运行模块中的第一个过程,而不是像MS Excel一样运行光标所在的过程。如果需要运行指定的过程,需要点击“Select Macro”按钮来选择需要运行的过程。
图标 2:停止(Stop)按钮,运行过程中点击这个按钮将停止代码运行而进入到编辑状态。
图标 3:逐过程(Step Over)按钮,逐句运行代码,当运行到调用的过程或函数时,将该过程和函数作为单个语句运行,然后直接运行后一个语句。
图标 4:逐语句(Step Into)按钮,逐句运行代码,当运行到调用的过程或函数时,代码将逐句运行过程或函数的每一个语句。
图标 5;跳出(Step Out)按钮,在调用的过程或函数中,如果不希望逐句运行每一个语句,点击此按钮可以完成该过程或函数而直接跳到该过程或函数的后一个语句。
图标 6:设置或取消断点,点击此按钮,将设置光标所在的行设置断点或取消断点。也可以双击指定行代码区左边的区域设置该行为断点,再次双击断点标记则取消断点。
图标 7:管理断点的对话框。点击此按钮,将显示如下图的对话框,在该对话框中可以添加或取消断点。在Breakpoints下的文本框中输入“#”并紧接着行号,如#12,然后单击“New”按钮,再点击“OK”按钮关闭对话框,则可在指定行添加断点。

图标 8:设置监视。在代码中选择指定变量,单击此按钮,则可以在监视窗口中添加对该变量的运行中的监视。或者在监视窗口中的文本框中输入变量,然后按Enter键也可添加监视变量。

图标 A:Object Catalog(对象目录),点击此按钮将显示Objects对话框,可以选择指定的过程双击即可打开该过程的代码窗口。

图标 B:Select Macro(选择宏),点击此按钮将显示OpenOffice.org Basic Macros对话框,可以运行、编辑或删除指定的宏。
图标 C: Select Module(选择模块),点击此按钮将显示OpenOffice.org Basic Macro Organizer对话框,你可以发现这个对话框中有三个标签页,Modules(模块)、Dialogs(对话框)、Libraries(库)。以后再 介绍Modules和Libraries。


在IDE中设计Dialogs

在宏中可以使用对话框提供一个用户界面,这里简单地介绍一下怎样在IDE中设计Dialogs。
首先打开OpenOffice.org Basic Macro Organizer对话框,然后选择Dialogs标签页。然后选择你需要保存这个对话框的库。如下图:

例如选择文档Untitiled 1的Standard库,单击New按钮,将弹出New Dialog对话框要求输入名称,在输入一个有意义的名称后点击”Edit“按钮即可进入对话框的设计窗口。

OOs提供了丰富的工具箱以供创建各种控件。点击其中一个控件,例如Textbox,在Dialog上拖动鼠标则可创建文本框。

选择文本框,单击右键弹出菜单“Properties”打开属性窗口,其中General标签页设置文本框的外观和内容,Events则可设置文本的事件过程。对话框的详细以后再介绍。

总的来说,相对MS Excel的IDE来说,OOS的IDE有些简单,尤其是调试。OOs仅提供了一个监视(Watch)窗口和过程堆栈(Call)窗口,而下面这些功能是OOs所缺少的:

另外对于宏和代码窗口的操作也不太方便。


使用库(Library)

我们知道宏被保存在模块中,而模块本身被保存在库中。库可以在以下三个位置:

当我们创建模块时,OOs已经帮我们创建了一个叫做Standard的库,我们不能删除它或将它改名。一般来说,我们可以使用OOo的标准库来满足我们大部分的要求。但是如果我们需要更有效地管理我们的模块或者需要一个多用户的环境,那么创建自己的库是必要的。

我们可以使用OOo Basic Organizer来创建自己的库,单击Tools -> Macros -> Organize Dialogs打开OOo Basic Macro Organizer对话框,然后选择Libraries标签页。选择库保存的位置,我们可以看到库列表中只有Standard库,如图:

单击“New…”按钮,弹出“New Library”对话框,输入库的名称,如图:

然后单击“OK”按钮即可在库列表中添加自定义的库。如图:

选择“Modules”标签页,我们就可以在自定义库中创建模块了,如图:

我们还可以拖动模块在库之间移动,如图。不过好像不能将相同名称的模块移动到另外一个库中。

在多用户环境中使用库

前面我们在My Macros位置创建了myLib库,这个库可以在下面这个路径找到:
C:\Documents and Settings\username\Application Data\OpenOffice.org\3\user\basic\myLib
这个目录一般包括下面这几个文件,另外还包括以我们自己创建的模块为名称的xba文件,如图:

这些文件其实都是一些XML格式的文件。

导入别人的库很简单,打开OOs Basic Macro Organizer对话框,选择“Libraries”标签页和并选择导入的位置例如当前文档,然后单击“Import”按钮,将显示“Import Libraries”文件浏览窗口,然后选择需要导入的库的位置,例如如图的MyLib库。

选择需要导入的xlb文件,点击“OK”按钮,然后弹出“Import Libraries”对话框提供一些导入的选项。


单击“OK”按钮,则可以将该库以及该库下所有的模块导入指定的位置,如图:


以Insert As Reference导入的库显示如图:

如果这个库是以单个电子表格发布,可以同样在“Import Libraries”文件浏览窗口中选择电子表格文件,如图:

在接着显示的“Import Libraries”对话框中选择需要导入的库,如图:

如果该位置已经存在相同名称的库而对话框中没有选择覆盖选项,则会弹出如下图的提示框。

如果新建文档中没有Standard库,则可以导入Standard库。但是如果已经存在Standard库,并且在“Import Libraries”对话框中选择覆盖选项,仍然不能导入别人命名为Standard的库,将显示如下提示框。

如果我们需要分发自己的库,可以使用“Export”功能,在Organizer对话框的“Libraries”标签页中,选择需要导出的库,单击“Export”按钮,显示“Export Basic Library”对话框,提供两个导出方式,如图:

一个是以Basic Library库方式,点击“OK”按钮后,弹出“Export as BASIC library”文件夹浏览窗口以选择导出的位置。

另外一个是以Extension方式,点击“OK”按钮后,弹出“Export library as extension”文件浏览窗口以保存extersion文件。

在OpenOffice.org Macros位置添加库

在My Macros位置保存库,只能供当前用户使用,如果其它人使用的话,则需要提供复制文件,这样不利于控制文件版本,如果以链接形式导入库,又不能控制文件被有意的修改或删除。
前面说过OpenOffice.org Macros位置保存库可以给所有的用户使用,但是在Organizer对话框中,我们发现Import按钮是不可用的。

前面说过,一个库保存在一个文件夹下,而这个文件夹包含两个xlb文件分别为模块和对话框的索引,另外这个文件夹中包含一个或多个xba文件,这些是模块定义文件,包含宏或对话框的代码。

因此我们可以将自定义库的文件夹直接复制到OpenOffice.org Macros位置下:
C:\Program Files\OpenOffice.org 3\Basis\share\basic

这个时候在Organizer对话框中仍然不能显示自定义的库。我们还需要修改上面这个目录下的xlc文件,在这个目录下有两个xlc文件,这两个文件都是xml格式,包含库和对话框列表。
script.xlc
dialog.xlc

用文本编辑器打开,然后再最后一行之前也就是之前添加下面的内容。

如图:

保存文件,然后重新打开OpenOffice.org Calc,就可以在Organizer对话框中看到自定义的库。

注意:我根据上面的操作修改script.xlc文件后,仍然在Organizer对话框中不能显示自定义的库,很奇怪,不知是否还有其它的地方需要设置。
另外,书上说在Organizer对话框的Module标签页中可以通过单击(可能需要多次)指定模块来修改模块名称,但实际上也是不能实现。



Convert Excel VBA to OpenOffice Basic:

http://www.business-spreadsheets.com/vba2oo.asp


VBA - OpenOffice.org Wiki: http://wiki.services.openoffice.org/wiki/VBA

In Chinese: http://wiki.services.openoffice.org/wiki/VBA_zh

Labels: , ,


Comments: Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?