• OOo on readyVB篇


    随着经济的不景气,越来越多的公司将办公软件从较昂贵的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.Frame

    6、创建一个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 gData
            For i = 0 To .Rows - 1
               If i = 0 Then
                    For j = 0 To .Cols - 1
                    Set myCell = mySheet.getCellByPosition(j, i)
                    Call myCell.setString(.TextMatrix(i, j))
                    Next j
               Else
                For j = 0 To .Cols - 1
                    If j = 0 Then
                        Set myCell = mySheet.getCellByPosition(j, i)
                        Call myCell.setString(.TextMatrix(i, j))
                    Else
                        Set myCell = mySheet.getCellByPosition(j, i)
                        
                        Call myCell.setValue(Val(.TextMatrix(i, j)))
                    End If
                Next j
               End If
            Next i
        End 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").embeddedObject
    5、对该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 Cells
        Dim args1(0) As Object
    
        Set args1(0) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
        args1(0).Name = "ToPoint"
        args1(0).Value = cellValue
    
        Call dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
    
        Dim args2(0) As Object
        Set args2(0) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
        args2(0).Name = "ColumnWidth"
        args2(0).Value = lngWidth
        
        Call 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 Cells
        Dim args1(0) As Object
    
        Set args1(0) = mySM.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
        args1(0).Name = "ToPoint"
        args1(0).Value = cellValue
    
        Call dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
        
        Dim args5(12) As Object
        Set 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 = 0
        args5(2).Name = "OuterBorder.RightBorder"
        args5(2).Value = Array(0, 0, 2, 0)
        args5(3).Name = "OuterBorder.RightDistance"
        args5(3).Value = 0
        args5(4).Name = "OuterBorder.TopBorder"
        args5(4).Value = Array(0, 0, 2, 0)
        args5(5).Name = "OuterBorder.TopDistance"
        args5(5).Value = 0
        args5(6).Name = "OuterBorder.BottomBorder"
        args5(6).Value = Array(0, 0, 2, 0)
        args5(7).Name = "OuterBorder.BottomDistance"
        args5(7).Value = 0
        args5(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 = 0
        args5(11).Name = "InnerBorder.ValidFlags"
        args5(11).Value = 127
        args5(12).Name = "InnerBorder.DefaultDistance"
        args5(12).Value = 0
    
        Call 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/

  • 相关阅读:
    Java 源码 Byte
    Git 常用命令add
    Mybatis Doc Configuration XML
    Java 源码 Integer
    Java 源码 Boolean
    Java 知识 fair and nonfair 锁
    Java 源码 Character
    Windows 窗口 左上角 有一个 “NO DC” 字样,一些 WPF 的应用显示有问题 的 解决办法
    java中判断对象属性值是否为空的函数 工具类
    Oracle跨库清洗数据数据
  • 原文地址:https://www.cnblogs.com/frankie/p/1547566.html
Copyright © 2020-2023  润新知