org宏学习笔记

Windows7中的库成效让管理文件和文书夹变得轻巧。今日大家就来拜访如何使用库,咋样把互连网分享的盘增多到库中。Windows7中的库让您更有益地保管分流在你Computer里的各个文件。你再也不要打开层层的文件夹寻觅你要的文书了,只要增添到库中就足以一本万利地找到它们了。

从英特网下载了某个有关OOs宏编制程序的电子书,先从Learn OpenOffice.org
Spreadsheet Macro Programming(PACKT 出版,作者为Dr. 马克 亚历克斯ander
Bain)初始学习。

要开垦库,只要在早先菜单的索求框输入“库”就足以了,
财富管理器就开打了库,里面有文书档案,音乐,图片,录像等公事夹.

此地具有的内容都以依附Windows
XP下的OpenOffice3.1版。未有设置粤语版,所以菜单和对话框与汉语版有个别差别。

图片 1

使用OOs Basic IDE

开班攻读编写宏从前必需学会IDE的使用方法。这里的Basic是意味着使用OOs
Basic语言来编制程序。

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

在上海教室中大家仍是可以够见到另外四个选项:

  • Python
  • BeanShell
  • JavaScript

也就代表除去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进程,大家也可以将它删除,它的最重要功能是显得二个简便的代码结构给大家。

固然Windows7您用的小时相当短,日常在文书档案文件夹存款和储蓄文件的话,你会在库中的文书档案文件夹看到这几个文件。一些软件还恐怕会在本身的文书档案里营造文件夹,那么些你也会看收获。

IDE的工具

前几天天津大学学概的介绍一下工具栏上的一一Logo,Logo标识如下图:

图标
1
:运维(Run)开关,点击那些开关将运营模块中的第3个进程,实际不是像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。

图片 2

在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所缺少的:

  • 马上窗口
  • 本地窗口
  • 指标浏览器
  • 智能语法提醒
  • 监视窗口的表达式监视

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

 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

前边介绍了OpenOffice.org的IDE蒙受,接着介绍怎样利用模块(Module)和库(Library)。

要是您有一些文书档案不是献身“作者的文档”里吧。你就得把她们都加多到库中。有多少个方法能够增加到库。

使用库(Library)

咱俩知道宏被保存在模块中,而模块本人被封存在库中。库能够在偏下多少个地点:

  • My Macros:仅你个人能够访谈宏
  • OpenOffice.org Macros:全体用户都得以访谈宏
  • 放到到原子钟格中:通过那一个钟表格访谈宏

当大家创制模块时,OOs已经帮我们成立了三个称为Standard的库,大家无法去除它或将它改名。一般的话,大家可以动用OOo的标准库来满意我们大多数的渴求。不过如若我们要求更平价地保管我们的模块恐怕必要一个多用户的条件,那么创造和煦的库是少不了的。

咱俩得以选拔OOo Basic Organizer来创造协调的库,单击Tools -> Macros
-> Organize Dialogs展开OOo Basic Macro
Organizer对话框,然后选用Libraries标签页。采纳库保存的岗位,我们能够看到库列表中独有Standard库,如图:

单击“New…”开关,弹出“New Library”对话框,输入库的称号,如图:

下一场单击“OK”开关就可以在库列表中增加自定义的库。如图:

慎选“Modules”标签页,大家就足以在自定义库中创设模块了,如图:

笔者们还可以拖动模块在库之间活动,如图。可是好像无法将同样名称的模块移动到别的二个库中。

  1. 右击想要加多到库的文书夹,选拔“满含到库”,再选取包蕴到不行库中。记得尽管涵盖到库中,但文件恐怕存款和储蓄在原有的职位,不会改换。
  2. 若是您要增加的文书夹已经开拓,能够从上边的工具条选拔“包罗到库”,再采纳要增加到哪里的库。能够看出库中包蕴了硬盘上相继地点的文书,包括其余的分区的文本。你也得以从库中删去文件夹,具体做法是点击上边包车型客车“n个地点”

在多用户意况中使用库

前边大家在My Macros地点成立了myLib库,那几个库能够在上边这些路子找到:
C:\Documents and Settings\username\Application Data\OpenOffice.org\3\user\basic\myLib
其一目录一般包含上面那多少个文本,别的还包含以大家团结创立的模块为名称的xba文件,如图:

那些文件其实都以局地XML格式的公文。

  • dialog.xlb 包罗对话框的目录
  • script.xlb 包罗模块的目录
  • Module1.xba 模块定义文件,包罗宏代码

导入外人的库很粗大略,展开OOs Basic Macro
Organizer对话框,选取“Libraries”标签页和并精选导入的职位比如当前文书档案,然后单击“Import”开关,将体现“Import
Libraries”文件浏览窗口,然后选用须求导入的库的岗位,举例如图的MyLib库。

慎选要求导入的xlb文件,点击“OK”按键,然后弹出“Import
Libraries”对话框提供部分导入的选项。

  • Insert As Reference
    (read-only):假设采用此项,只是创制八个对此该库只读的链接,大家得以运转宏但不可能修改。假使大家想做自身的退换,则不能选取此项。
  • Replace existing
    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

用文件编辑器展开,然后再最终一行在此之前相当于</library:libraries>以前增进上边包车型大巴剧情。

<library:library library:name=”myLib”
xlink:href=”$(INST)/share/basic/myLib/script.xlb/” xlink:type=”simple”
library:link=”true” library:readonly=”false”/>

如图:

保存文件,然后再一次张开OpenOffice.org
Calc,就足以在Organizer对话框中看到自定义的库。

只顾:小编根据地点的操作修改script.xlc文件后,还是在Organizer对话框中不可能显得自定义的库,很想获得,不知是还是不是还会有其他的地点必要安装。
别的,书上说在Organizer对话框的Module标签页中得以由此单击(恐怕须要频仍)钦点模块来修改模块名称,但实则也是无法兑现。

 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

 

前边介绍了OpenOffice.org的IDE环境模块(Module)和库(Library)。今后开端看四个OpenOffice宏的演示。

Sub Main
   Dim fname as String
   Dim sname as String
   Dim username as String
   fname = "Fred"
   sname = "Smith"
   ppi_add_user_sub(fname, sname)
   username = ppi_add_user_func(fname, sname)
   msgbox "User Name for " &amp; fname &amp; " " &amp; sname _
   &amp; " is " &amp; username, 0 ,"User Name"
End Sub
Sub ppi_add_user_sub (fname as String, sname as String)
   Dim username as String
   username =lcase(sname+mid(fname,1,1))
   msgbox "User Name for " + fname + " " + sname _
     + " is " + username, 0 ,"User Name"
End Sub
Function ppi_add_user_func (fname as String, sname as String) as String
   ppi_add_user_func = lcase(sname+mid(fname,1,1))
End Function

从上边那一个代码能够看到,OpenOffice的宏和MS
Excel的VBA代码十二分相似。一样使用Dim语句注明变量,一样适用Sub和Function分别代表经过和函数。以至有的函数或语句都以同一的,比方lcase和msgbox。

一致,在Basic编辑器中甄选供给查询的函数或讲话,按F1能够赢得该函数或言辞的救助。

在MS Excel
VBA中,我们根本是针对Excel对象模型编程来调整Excel。在OOs中,大家则是访谈OOs的Universal
Network
Objects,一般叫做UNOs。UNOs是跨平台和跨语言的靶子,大家能够动用它来决定OOo际遇的各个地点。

纵然如此库成效很棒,但亦不是圆满的。不是全体的文书夹都足以增加到库中,微软那玩意儿!本地球磁性盘不论是哪位分区都得以,就到底外界的USB接口硬盘不论是NTFS依然FAT32
都足以轻巧地充分到库中。但万一您想增多互连网分享的文本夹的话,没门了。

OOo对象模型

大家从下往上来精通UNOs。

先把大家的宏通晓为客户端(Client),和UNOs的接口(Interface)打交道。
图片 3

的确无能为力了啊,依然有牛人写个工具Win7 Library
Tool,能够到这里下载:http://zornsoftware.talsit.info/blog/win7-library-tool.html
,能够用个工具增多互联网分享文件夹到库中。 Win7 Library Tool
这么些小工具很直观好用。

接口(Interface)

各样接口由一多种的主意结合,我们得以应用那个点子来:

  • 获取或安装参数
  • 调节接口定义的其余功用性的操作

每一个接口包罗在二个劳动(Service)中。
图片 4

用法相当的粗略,先点击左下角第一个按键:add all your existing
libraries,然后能够因而旁边的开关来自定义库了。选拔三个库以后,点击 edit
properties of the selected library
就足以一本万利地自定义库(增多/删除Curry面包车型地铁文本夹)了。

服务(Service)

二个服务是八个UNO部件—OOo
Calc的二个组成都部队分。每一个服务由三个或四个服务组合,它还包蕴一雨后春笋的习性。
图片 5
我们能够开掘服务有多少个门类的性质:

  • 常数(Constants)
  • 枚举(Enums)
  • 例外(Exceptions)
  • 结构(Structs)

图片 6

图片 7

模块

UNO服务按层级结构在模块中分组。大家未来已经从UNO的最底级来到了最高等。非常多模块嵌套在别的二个模块中。而持有的模块嵌套在三个最高档的模块—com.sun.star。那些模块就好像Excel中的Application对象。
图片 8

初阶运用UNOs

到了此处大家基本上对OpenOffice.org对象模型有了一个骨干的摸底。大家得以先利用一个简约的事例(展开和停业一个钟表格)来询问哪些利用UNOs。
我们先要求理解:

  • 每一个服务保存在一个模块中。
  • 抱有的模块保存在二个焦点模块中—com.sun.star。
  • 二个劳动由函数createUnoService创设。
  • 大家将动用frame模块中的Desktop服务。

图片 9

Sub OpenAndClose
    Dim oDesk as Object
    Dim oDoc as Object
    Dim oUrl as String
    oDesk = createUnoService ("com.sun.star.frame.Desktop")
    oUrl = "private:factory/scalc"
    oDoc = oDesk.loadComponentFromURL (oUrl, "_blank", 0, Array() )
    oDoc.close(true)
End Sub

本条代码张开三个空荡荡机械钟格然后倒闭它,没什么用处,不过告诉大家什么样操作原子钟格。
那就是说如何张开现存文件呢?必要修改”private:factory/scalc”为急需张开的文件名称。大家看看了地点使用了loadComponentFromU途乐L方法,那个法子接受上边那样的输入:
* file:///home/bluek/ppi_current.dos (Linux环境)
* file:///c:/ppi_current.ods (Windows环境)
大家能够运用convertToUrl函数来调换。

Sub exampleConversion
    Dim f1 as String
    Dim f2 as String
    f1 = "/home/bluek/ppi_current.ods"
    f2 = "C:\ppi_docs\ppi_current.ods"
    msgBox _
        f1 &amp; " converts to " &amp; convertToUrl (f1) &amp; chr (10) &amp; _
        f2 &amp; " converts to " &amp; convertToUrl (f2)
End Sub

上边是修改后的代码。决断是不是文件存在,假使不设有则张开新的空域表格,然后保留文件并关闭。

Sub OpenAndClose
   Dim oDesk as Object
   Dim oDoc as Object
   Dim oFile as String
   Dim oUrl as String
   Dim oUrlTemp as String
   oDesk = createUnoService ("com.sun.star.frame.Desktop")
   ' 改变文件名以便于写入
   oFile = "c:\home\bluek\ppi_current.ods"
   oUrl = convertToUrl (oFile)
   ' 检查文件是否存在,如果不存在则使用空白电子表格
   If fileExists (oFile) Then
      oUrlTemp = oUrl
   Else
      oUrlTemp = "private:factory/scalc"
   End If
   oDoc = oDesk.loadComponentFromURL (oUrlTemp, "_blank", 0, Array() )
   oDoc.storeAsUrl (oUrl, Array()) ' 保存文件
   oDoc.close(true)
End Sub

除此以外大家还是能简化一些。下面的代码中大家成立了Desktop服务,不过其实在Calc张开的时候已经自行创立了四个称呼StartDesktop的靶子。
如此大家能够将:

oDesk = createUnoService ("com.sun.star.frame.Desktop")
oDoc = oDesk.loadComponentFromURL(oUrlTemp, "_blank", 0, Array())

改成

oDoc = starDeskTop.loadComponentFromURL(oUrlTemp, _
"_blank", 0, Array())

在线UNO资料

Calc自带的支持文件未有提供详实的UNO参照他事他说加以考察。我们必要寻觅OpenOffice.org的在线资料来学习UNO。以此网页席卷了com.sun.star下全部模块的源委,以层级结构协会。

点击任何二个嵌套的模块,我们得以见到那些目的模型包括的装有因素:

  • Services
  • Interfaces
  • Constants
  • Enums
  • Exceptions
  • Structs

其余大家还能窥见有个别模块还隐含:

  • 嵌套的模块
  • 那么些模块中服务应用的接口列表

随后能够点击这个链接得到更详实的音讯。

一个不务空名的例证:使用Table UNO访问单元格

Table就像MS Excel中的Worksheet。
大家得以访问OpenOffice.org网址的table模块网页。
图片 10
先只关心服务。有无数table相关的劳务,大家先找CellRange服务和它的XCellRange接口。
图片 11
从接口页面大家能够看来有多少个方法访谈单元格,getCellByPosition、getCellRangeByPosition和getCellRangeByName。

劳动中的服务

咱俩经常发掘三个劳动还蕴藏另贰个服务。CellRange服务是com.sun.star.table模块中的一个劳动,它还是能在别的贰个服务speadsheet中采取。

开掘带有的服务

假使我们想知道是或不是叁个服务是或不是是一个涵盖的劳务,有七个情势:

  1. 在总体文书档案中追寻要使用的服务,看是或不是带有别的的劳务(大家需求拜候的劳务)
  2. 找到大家想要包涵的劳务的文书档案,看是还是不是有三个”Use”链接可用。

以CellRange服务为例,大家将会开采“Link”链接可用,单击链接,大家得以窥见那几个服务包括在:

  • com.sun.star.sheet.SheetCellCursor
  • com.sun.star.sheet.SheetCellRange
  • com.sun.star.sheet.Spreadsheet

怎么样查找方法在那个服务中可用

打开OOo全局索引网页,这里有全部模块、服务、方法、常数、枚举、例外和组织的A-Z完整列表,假设大家研究“Print”,将会发觉七个援用:

  • P奇骏INT: 常数组com.sun.star.awt.KeyFunction下的常数
  • Print: com.sun.star.text.BaseFrameProperties服务下的脾性
  • print(): com.sun.star.view.XPrintable接口下的函数

如此大家知晓接口com.sun.star.view.XPrintable下的print函数,那么那个接口在如何服务中使用?在XPrintable接口文档页面,单击“Use”链接,大家得以获得帮衬这么些接口的具有服务列表。

 

 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

日前介绍了OpenOffice.Org
SpreadSheet宏的IDE和UNO,未来得以开头编写制定代码了。这里首要介绍怎样利用宏操作工作表,大家将学会怎么:

  • 开发和关闭文件
  • 利用七个专业表
  • 在做事表中操作数据
  • 应用OOo的放置函数
  • 运用单元格和区域

开荒和停业机械表格

在前方大家早已清楚了如何张开和破产原子钟格

  1. 动用starDeskTop对象访问石英表格
  2. 应用loadComponentFromU奥迪Q5L函数载入石英钟格
  3. 选取close方法关闭电子手表格
  4. 行使fileExists函数判定文件是或不是存在
  5. 使用storeAsUrl方法保存钟表格。

图片 12
随即大家初阶操作原子钟格的剧情。

操作手表格单元格

咱俩通晓:

  • 每种石英手表格包罗一个或多少个工作表(一般私下认可是3个,最多能够到259个)
  • 各样工作表由8一九一九00个单元格组成(256列乘以3叁仟行)— OpenOffice.org
    Calc 3.0曾经扩充到671088六14个单元格(1024倍增65536行)
  • 每一个工作表能够因此一个序号(0到255)来指认
  • 各类单元格能够因而getCellByPosition方法运用三个格子坐标来指认它的职位

图片 13

上边这几个代码在二个职业表的单元格中填充内容:

Sub singleFile
   Dim oDoc as Object
   Dim oSheet as Object
   Dim oCell as Object
   oDoc = starDeskTop.loadComponentFromUrl _
      ("private:factory/scalc", "_blank",0,Array ())
   oSheet = oDoc.sheets (0)
   oCell = oSheet.getCellByPosition (0,0)
   oCell.String = now 'This function returns the current date and time
End Sub

以此宏张开三个空白电子钟格,得到第一个工作表,然后拿走最左上角的单元格,写入当前时间到该单元格。
剧情能够以二种方法写入到单元格—公式、字符串、数值。那一个很首要,参照他事他说加以考察上面包车型地铁代码:

oCell = oSheet.getCellByPosition (0,1)
oCell.Value = 20
oCell = oSheet.getCellByPosition (0,2)
oCell.Value = 30
oCell = oSheet.getCellByPosition (1,1)
oCell.String = "=A2+A3"
oCell = oSheet.getCellByPosition (2,1)
oCell.Formula = "=A2+A3"
oCell = oSheet.getCellByPosition (3,1)
oCell.Value = "=A2+A3"

就算我们输入的新闻大致,不过结果却天地之别。
图片 14
一经轻易一些来讲,下边包车型大巴代码也得以写成:

oSheet.getCellByPosition (0,1).Value = 20
oSheet.getCellByPosition (0,2).Value = 30
oSheet.getCellByPosition (1,1).String = "=A2+A3"
oSheet.getCellByPosition (2,1).Formula = "=A2+A3"
oSheet.getCellByPosition (3,1).Value = "=A2+A3"

选取OOo内置函数

小编们会时常在Calc中选用OOo的放权数学函数。在宏中大家也能够动用它们。举个例子,我们得以:

oCell1 = oSheet.getCellRangeByName ("A1")
oCell2 = oSheet.getCellRangeByName ("B1")
oCell1.value = 23.1
oCell2.value = SIN(oCell1.value)

也能够那样:

oCell2.formula = "=SIN(A1)"

有啥界别吧?前面包车型大巴代码将值-0.9归入B1单元格,而背后的代码则在B1单元格中归入三个公式。
唯独,只有一部分函数能够这么使用。举个例子,上面包车型客车代码能够运维:

For r = 0 to 9
   i = r + 1
   oCell1 = oSheet.getCellByPosition (0,r)
   oCell1.Value = i
   oCell2 = oSheet.getCellByPosition (1,r)
   oCell2.Formula = "=ROMAN(A" + i + ")"
Next r
oLetters = Array("I","V","X","L","C","D","M")
For r = 0 to ubound(oLetters)
   i = r + 1
   oCell1 = oSheet.getCellByPosition (2,r)
   oCell1.String = oLetters(r)
   oCell2 = oSheet.getCellByPosition (3,r)
   oCell2.Formula = "=ARABIC(C" + i + ")"
Next r

运作方面包车型地铁代码,将要劳作表中展现上边风趣的结果。
图片 15
可是假使大家试上面包车型客车代码:

oCell2.value =ARABIC(oCell1.String)

将会获取上面包车型客车谬误提示:
图片 16

但那并不表示我们不能够应用内置函数,只是须要动用其它一种情势(某些看似于Excel
VBA中的Application.WorksheetFunction)。

oFunction = createUnoService("com.sun.star.sheet.FunctionAccess")
oCell4.value = oFunction.callFunction("ARABIC", _
Array(oCell3.String))

专注传递给函数CallFunction的第一个参数是三个数组。

取名专门的学业表和单元格

大家得以行使序号通过Sheets会集来访问专门的工作表,然而在剔除或增添专业表恐怕专门的工作表的逐一改造后,使用现成的序号访谈职业表时或许会发出错误。由此最佳应用专门的工作表名称来访谈它们。

拜望现成命名的专门的学问表和单元格

动用序号访谈:

oSheet = oDoc.sheets(0)

使用名称访谈:

oSheet = oDoc.Sheets.getByName("PPI Accounts")

会见到办事表后,也足以采纳名称访谈单元格。
行使地方访谈:

oCell = oSheet.getCellByPosition(0,1)

选取名称访谈:

oCell = oSheet.getCellRangeByName("Daily Total")

创制新的命名专门的学问表和单元格

命名八个已存在的单元格一点也不细略:

oSheet.name =  "PPI Client Details"

创立二个新的单元格也差不离轻巧:

oSheet = oDoc.createInstance ( "com.sun.star.sheet.Spreadsheet" )
oDoc.Sheets.insertByName ( "PPI Daily Tasks", oSheet )

给三个单元格命名则稍微麻烦点:

Dim oCellAddress As new com.sun.star.table.CellAddress
Dim oNamedRanges
oNamedRanges = oDoc.NamedRanges
oNamedRanges.addNewByName("Total", "$Sheet1.$A$8", oCellAddress, 0)

删去工作表

oDoc.Sheets.removeByName("Sheet3")

行使八个工作表

选择四个工作表和多少个职业表的复杂程度是大半的。

Sub sequencialFiles
   Dim oDoc as Object
   Dim oDesk as Object
   Dim oSheet as Object
   Dim oCell as Object
   oDoc = starDeskTop.loadComponentFromUrl _
      ("private:factory/scalc", "_blank",0,Array())
   oSheet = thisComponent.sheets (0)
   oCell = oSheet.getCellByPosition (0,0)
   oCell.String = now
   oDoc = starDeskTop.loadComponentFromUrl _
      ("private:factory/scalc", "_blank",0,Array())
   oSheet = thisComponent.sheets (0)
   oCell = oSheet.getCellByPosition (0,0)
   oCell.String = now + 1
End Sub

运转结果如图:
图片 17
上面的代码应用二个指标变量来代表不一致的对象,那样要求再转换来别的一个指标此前保险做到自身的操作。大家会发觉只要对各样石英表格使用不相同的指标会更管用一些,这样大家能够操纵全数的操作。

Sub multiSheets
   Dim oURL1 as String
   Dim oURL2 as String
   Dim oDoc1 as Object
   Dim oDoc2 as Object
   Dim oCell1 as Object
   Dim OCell2 as Object
   oURL1 = "private:factory/scalc"
   oURL2 = "private:factory/scalc"
   oDoc1 = starDeskTop.loadComponentFromURL (oURL1, "_blank", 0, _
      Array() )
   oDoc2 = starDeskTop.loadComponentFromURL (oURL2, "_blank", 0, _
      Array() )
   oCell1 = oDoc1.Sheets (0).getCellByPosition (0,0)
   oCell1.String = now
   oCell1 = oDoc1.Sheets (0).getCellByPosition (0,1)
   oCell1.Value = 37.5
   oCell2 = oDoc2.Sheets (0).getCellByPosition (0,0)
   oCell2.String = now
   oCell2 = oDoc2.Sheets (0).getCellByPosition (0,1)
   oCell2.String = "Amount"
   oCell2 = oDoc2.Sheets (0).getCellByPosition (1,1)
   oCell2.String = "VAT"
   oCell2 = oDoc2.Sheets (0).getCellByPosition (2,1)
   oCell2.String = "Total"
   oCell2 = oDoc2.Sheets (0).getCellByPosition (0,2)
   oCell2.Value = oCell1.Value
   oCell2 = oDoc2.Sheets (0).getCellByPosition (1,2)
   oCell2.Value = oCell1.Value * 0.175
   oCell2 = oDoc2.Sheets (0).getCellByPosition (2,2)
   oCell2.Value = oCell1.Value * 1.175
End Sub

采纳区域

除开拓用单元格之外,大家还供给运用区域。下边包车型大巴代码将第二个办事表中区域A1:A100的源委肩负到第叁个职业表一样的区域中。

oRange1 = oDoc1.Sheets (1).getCellRangeByName ("A1:A100")
oRange2 = oDoc2.Sheets (0).getCellRangeByName ("A1:A100")
oRange2.setDataArray (oRange1.getDataArray ())

也能够应用单元格地方来代表区域。

oRange1 = oDoc1.Sheets (0).getCellRangeByPosition (0,0,0,100)
oRange2 = oDoc2.Sheets (0).getCellRangeByPosition (0,0,0,100)

区域在运用一些函数时特意有用。

oCell1 = oSheet.getCellRangeByName ("A1")
oCell2 = oSheet.getCellRangeByName ("A2")
oCell3 = oSheet.getCellRangeByName ("A3")
oCell4 = oSheet.getCellRangeByName ("B3")
oCell1.Value = 36
oCell2.Value = 57
oCell3.Value = 42
oRange1 = oSheet.getCellRangeByName ("A1:A3")
'Remember to use callFunction
oCell4.Value = _
oFunction.callFunction("STDEV", Array(oRange1.getDataArray ()))