2011年2月28日

OpenOffice Calc巨集最簡範例

很久很久沒更新了,主要是工作忙碌,一個個bug接著來,一直處於很忙碌狀態。

從上次po文說要開發Stock程式後沒多久,
我開始轉移方向到OpenOffice巨集的學習,
原因是,Stock程式的前段、後段都完成了
(前段,透過AutoIT控制證券軟體後,DDE取得即時資料;後段,透過AutoIT控制證券軟體或網頁下單),
而最關鍵的行為判斷(也就是演算法)的開發一直沒有很好得構想,
我的期望是,能夠有個簡易但富有彈性的開發環境可以進行演算法開發和評估,
但Java要開發這樣的程式,實在是不大方便,要作所謂的回測(用歷史資料測試效果)也沒辦法,
曾經考慮過整個用Java寫,也考慮過修改OpenSource的看盤軟軟體,
但感覺效果都很差,複雜度都很高,最後回頭看Excel,
考慮到Linux,因此決定改以OpenOffice為中心,連結先前開發的前段和後段,
以OpenOffice的Calc來開發和測試演算法的部份,
這部份在今天有很大的突破,以後再說。

這裡這篇,我寫上OpenOffice Calc的簡單巨集開發,算是熱身,
之後再陸續貼些在使用不錯的Macro。

環境:Windows or Linux 均可
OpenOffice版本:3.2.1(新版亦可)

1. 開啟OpenOffice Calc後,點選
工具巨集組織巨集OpenOffice Basic

2. 選取要編輯的巨集(Macro)檔案
我的巨集StandardModule1Main編輯

3. 巨集(Macro)編輯視窗簡介

4. 輸入程式碼
在剛剛看到的Sub Main和Sub之間輸入如下程式碼:
Sub Main
Dim oDoc As Object
Dim oSheet As Object
Dim oCell as Object

REM 新建一個試算表檔案
oDoc = starDeskTop.loadComponentFromUrl ("private:factory/scalc", "_blank",0,Array ())
REM 開啟目前的試算表視窗
REM oDoc = StarDesktop.CurrentComponent

REM 建立新試算表分頁
REM http://docs.sun.com/app/docs/doc/819-0439/faail?l=en&a=view
oSheet = oDoc.createInstance("com.sun.star.sheet.Spreadsheet")
oDoc.Sheets.insertByName("Stock1", oSheet)
REM 取得試算表分頁
oSheet = oDoc.Sheets.getByName("Stock1")
REM 取得第幾個試算表分頁
REM oSheet = oDoc.Sheets(0)

oCell = oSheet.getCellByPosition (0,0)
oCell.String = "我的第一個Input"
End Sub


如下圖:

5. 執行
將游標移到「Sub Main」,接著點擊「執行」按鈕

6. 執行結果
執行後,會發現新開了一個新的Calc試算表視窗,如下圖:

這個新的試算表視窗,就是透過剛剛的巨集(Macro)程式建立的,
而其中可以注意到,它會多一個叫做「Stock1」的試算表分頁,
這也是剛剛巨集(Macro)程式產生的。

接著我們點擊切換到Stock1分頁,如下圖:

我們可以發現,在「A1」這個 Cell 當中,會顯示「我的第一個Input」,
BINGO,這也是我們剛剛寫在巨集(Macro)裡面的程式碼。

至此,我們整個巨集(Macro)的開發流程就很確定了。

接著,可以出個作業自己玩玩看,
用單步執行的方式,把剛剛的巨集(Macro)程式執行一次,
搭配程式碼的註解來看看,可以對整個程式內容更有感覺。

2 則留言:

匿名 提到...

給你參考,DDE的話,用
Python來連結,會更有彈性

阿呆 提到...

感謝!
我目前的確是用DDE轉成Socket,
但不直接使用DDE的原因是,
DDE不支援Linux,我無法在Linux上做這些,
我曾經想過是不是可以用NetDDE,
不過還不知道怎麼用。
Python的DDE我有稍微喵過(我不會Python),
沒記錯的話,它是win32 only的。