OOo on ready---VB篇
隨著經濟的不景氣,越來越多的公司將辦公軟件從較昂貴的MS Office轉換為便宜甚至免費的Open Office.org(簡稱OOo),畢竟OOo幾乎可以滿足所有的日常辦公需求,并且兼容MS Office,那么作為開發人員的我們必須對OOo的開發進行了解。
本序列包括OOo on ready---VB篇和OOo on ready---C#篇
本文開篇使用VB做開發語言對scalc來做一個Demo,演示OOo的一些常用開發。
一、OOo的基本操作
該處需要做以下四個動作:
1、打開OpenOffice服務:
Set mySM = CreateObject("com.sun.star.ServiceManager")2、打開OpenOffice程序:
Set myDesk = mySM.createInstance("com.sun.star.frame.Desktop")3、創建OpenOffice文件:
Set myFile = myDesk.loadComponentFromURL("private:factory/scalc", "_blank", 0, myArgs())4、獲取OpenOffice工作薄:
Set mySheet = mySheets.getByIndex(0)5、獲得當前文檔:
Set document = myDesk.CurrentComponent.CurrentController.Frame6、創建一個dispatcher(調度器?):
Set dispatcher = mySM.createInstance("com.sun.star.frame.DispatchHelper")有了這些,就可以對對單元格進行操作了:比如寫入字符串
Set myCell = mySheet.getCellByPosition(0, 0) Call myCell.setString("Normal Material Application")二、將MSFlexGrid內的數據導出為scalc文件做一中的前4步以獲得一個工作薄,之后就可以使用那個如下方法將數據導入到scale中: With gDataFor i = 0 To .Rows - 1If i = 0 ThenFor j = 0 To .Cols - 1Set myCell = mySheet.getCellByPosition(j, i)Call myCell.setString(.TextMatrix(i, j))Next jElseFor j = 0 To .Cols - 1If j = 0 ThenSet myCell = mySheet.getCellByPosition(j, i)Call myCell.setString(.TextMatrix(i, j))ElseSet myCell = mySheet.getCellByPosition(j, i)Call myCell.setValue(Val(.TextMatrix(i, j)))End IfNext jEnd IfNext iEnd With表格的相關屬性我們將在下面的文字中描述。
三、在scalc文件內繪制chart圖
同樣的,要做一中的前4步以獲得一個工作薄,然后
1、獲得一個矩形序列:
Set Rect = mySM.Bridge_GetStruct("com.sun.star.awt.Rectangle")2、獲得一個cell地址:Set RangeAddress(0) = mySM.Bridge_GetStruct("com.sun.star.table.CellRangeAddress")3、在當前工作薄內插入一個chart圖:Call Charts.addNewByName("LineChart", Rect, RangeAddress(), True, True)4、獲得該chart圖:Set Chart = Charts.getByName("LineChart").embeddedObject5、對該chart圖的相關屬性進行賦值或者修改,比如,修改該圖的形狀:Chart.Diagram = Chart.createInstance("com.sun.star.chart.LineDiagram")這里有各種chart圖的形狀如下//Diagram Service Names//com.sun.star.chart.BarDiagram//com.sun.star.chart.AreaDiagram//com.sun.star.chart.LineDiagram//com.sun.star.chart.PieDiagram//com.sun.star.chart.DonutDiagram//com.sun.star.chart.NetDiagram//com.sun.star.chart.XYDiagram//com.sun.star.chart.StockDiagram四、在scalc文件內插入一張圖片同樣運行一中的6個步驟獲得一個dispatcher,然后使用該dispatcher來運行OOo中的UNO命令Call dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args2())其中args2()是一個相關屬性值的數組,需要使用如下方法進行定義:Set args2(0) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")賦值方法很簡單,使用.Name及.Value進行賦值,如:args2(0).Name = "FilterName" args2(0).Value = "GIF - Graphics Interchange Format"上面的屬性是定義插入的該圖片的后綴名必須為GIF.五、在scalc文件內表格的屬性進行設置
在OOo的文件中,相關屬性是先定義一個PropertyValue,再對該屬性設置Name、Value,然后使用dispatcher讓OOo去執行該屬性。
例如我們對表格的單元格的寬度進行設置,就可以使用如下的函數進行:
Public Function setColWidth(mySM As Object, mySheet As Object, document As Object, dispatcher As Object, cellValue As String, lngWidth As Long)'Select CellsDim args1(0) As ObjectSet args1(0) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")args1(0).Name = "ToPoint"args1(0).Value = cellValueCall dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())Dim args2(0) As ObjectSet args2(0) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")args2(0).Name = "ColumnWidth"args2(0).Value = lngWidthCall dispatcher.executeDispatch(document, ".uno:ColumnWidth", "", 0, args2()) End Function對表格的表框進行設置我們就可以使用如下函數進行:
Public Function addBorder(mySM As Object, mySheet As Object, document As Object, dispatcher As Object, cellValue As String)'Select CellsDim args1(0) As ObjectSet args1(0) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")args1(0).Name = "ToPoint"args1(0).Value = cellValueCall dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())Dim args5(12) As ObjectSet args5(0) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")Set args5(1) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")Set args5(2) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")Set args5(3) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")Set args5(4) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")Set args5(5) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")Set args5(6) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")Set args5(7) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")Set args5(8) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")Set args5(9) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")Set args5(10) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")Set args5(11) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")Set args5(12) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")args5(0).Name = "OuterBorder.LeftBorder"args5(0).Value = Array(0, 0, 2, 0)args5(1).Name = "OuterBorder.LeftDistance"args5(1).Value = 0args5(2).Name = "OuterBorder.RightBorder"args5(2).Value = Array(0, 0, 2, 0)args5(3).Name = "OuterBorder.RightDistance"args5(3).Value = 0args5(4).Name = "OuterBorder.TopBorder"args5(4).Value = Array(0, 0, 2, 0)args5(5).Name = "OuterBorder.TopDistance"args5(5).Value = 0args5(6).Name = "OuterBorder.BottomBorder"args5(6).Value = Array(0, 0, 2, 0)args5(7).Name = "OuterBorder.BottomDistance"args5(7).Value = 0args5(8).Name = "InnerBorder.Horizontal"args5(8).Value = Array(0, 0, 2, 0)args5(9).Name = "InnerBorder.Vertical"args5(9).Value = Array(0, 0, 2, 0)args5(10).Name = "InnerBorder.Flags"args5(10).Value = 0args5(11).Name = "InnerBorder.ValidFlags"args5(11).Value = 127args5(12).Name = "InnerBorder.DefaultDistance"args5(12).Value = 0Call dispatcher.executeDispatch(document, ".uno:SetBorderStyle", "", 0, args5())End Function?
六、總結一下
本文講解了VB對OOo開發的相關操作,其實對OOo的操作很簡單,一般都是通過執行OOo提供的UNO相關命令進行的,執行方式和OOo中的marco基本上一個樣,如果想做到什么想過,就可以先在OOo中錄制一個marco,然后查看該marco的代碼,在VB中轉換就可以了。最后,將本文的demo代碼附上,以供參考!
更多技術文章,敬請登陸http://www.qx-net.cn/
轉載于:https://www.cnblogs.com/frankie/archive/2009/08/16/1547566.html
總結
以上是生活随笔為你收集整理的OOo on ready---VB篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浮点数[ZT]
- 下一篇: HTML相对路径(Relative Pa