這篇簡單的介紹OpenOffice Macro的API的架構,
瞭解架構後,可以比較容易瞭解API怎麼使用。
要接觸OpenOffice BASIC前,
我原本認為它的BASIC語法應該會跟VBA差不多,
學習下去後才發現,它跟VBA完全不同,類似的只有基本語法,
但API的使用,操作完全不同,基本上沒辦法無痛,
一定要下去瞭解UNO才有辦法使用。
OOo(OpenOffice.org簡稱)的Macro支援很多套程式語言,
包括:BASIC、Java、Java Script、C++、Java BeanShell Script
它們的核心,都是呼叫OOo提供的一整套API,
這套API被稱為UNO(Universal Network Objects),
透過UNO,上述所有語言都能呼叫和操作OpenOffice,
好處是跨語言,壞處是,就算只是想學BASIC,也得瞭解UNO。
如果先前學的是Java,要瞭解UNO很容易,UNO不愧是Sun設計的,
很有Java的概念。
一般來說,常見的UNO概念圖如下:
這裡我不得不說,我第一次看得時候,看一眼就沒興趣了,
但事實上它只是描述了一個簡單的架構。
UNO(Universal Network Objects),我猜測,
也許是為了要設計一個能跨平台使用的溝通模式,
又因為是Sun,所以以Java的物件導向為架構,用網路來實做,
我想用網路而不用其他溝通機制的原因,
應該是因為網路是各平台都有,
而且在UNIX、Linux的環境,他是很基本又常見的溝通機制,
也因為這樣,取名為Universal Network Objects。
簡單的說,它跟Java的物件導向概念雷同,它們的類比如下:
UNO Service → Java Class
UNO Properties → Java Object Properties
UNO Method → Java Object Method
簡單的說,它是以Java的物件導向為基本概念,
所有的Java Class在UNO上,都稱為Service,
每個Service都有自己的Properties和Method。
要使用Service,則和使用Java Object有些許不同,類比如下:
UNO:
Dim oDesk as Object
oDesk = createUnoService ("com.sun.star.frame.Desktop")
Java:
Object oDesk;
oDesk = new com.sun.star.frame.Desktop();
這樣應該很清楚,差異在於,要定義物件時,使用
Dim <名稱> as <物件名稱>
要實體化時(UNO下應該說是建立Service),使用
<名稱> = createUnoService("com.sun.star.frame.Desktop")
這樣描述,應該就能清楚的瞭解UNO的Service概念,
而要使用UNO Service也很容易,同樣以上面的oDesk為例子,
可以如下使用:
Dim oDoc as Object
oDoc = oDesk.loadComponentFromUrl("private:factory/scalc", "_blank",0,Array ())
在這裡,loadComponentFromUrl()就是com.sun.star.frame.Desktop的Method,
使用上和Java的語法差不多。
要定義或修改Properties也很容易,類似如下:
oCell.String = "我的第一個Input"
這樣就能修改oCell的String這個Property,
並將內容改為"我的第一個Input"。
最後,同樣出個簡單的問題,答案很好找,
卻在使用時頭一個會遇到疑問。
在Java中,每個Object幾乎都有相對應的Object名稱,
例如:
JFrame f = new javax.swing.JFrame();
像是JFrame f裡面的JFrame。
那類比到UNO Service時,這個建立後的Service,
是否也有獨立的名稱?
如果有,那會是甚麼?
如果沒有,那又會是甚麼?
補充:
漏了一個部份.....
我們回到前面常見的UNO概念圖,圖上在Service的外圍,
有一個Module將Service包裹住,Module是甚麼?
這也是很簡單的概念,同樣取自Java,類比如下:
UNO Module → Java Package
實際上,和Java的Class一樣,OpenOffice的Service根據不同的用途,
會被包裹在不同的Module裡面,例如:
javax.swing.JFrame
我們可以知道JFrame屬於javax.swing這個Package,同樣的,在UNO中
com.sun.star.frame.Desktop
Desktop就是屬於com.sun.star.frame這個Package。
1 則留言:
謝謝你寫得UNO說明
我也正在玩OOo Macro
這對我這種菜鳥幫助很大~
3Q!
張貼留言