OpenOffice宏访问表的内容

时间:2013-03-04 12:34:07

标签: linux macros openoffice-writer openoffice-basic

我编写了一个宏,它应该从OpenOffice文档(Writer,而不是Calc)中的表中将两个日期(dd.mm.yyyy)作为字符串。这两个日期应该合并到这个: DDMMYYYY-DDMMYYYY。这应该用作文件名。

Table只有一行和6列,第一个Date在table2中:D1:D1,第二个在table2中:F1:F1。 我将其“翻译”为table2(1,4)和table2(1,6)

This German site正在做我想做的事情,但使用OOCalc文档中的电子表格而不是OOWriter。

够了,这是我的代码:

sub save
  oDoc=thisComponent

  sStartDate = oDoc.Table2(1, 4)
  sEndDate = oDoc.Table2(1, 6))

  sFilename = sStartDate.String & sEndDate.String

  sURL = ConvertToURL("file:///home/cp/Documents/" & sFilename & ".odt")

  msgbox sURL
  ' oDoc.StoreAsURL(sURL, Array())

end sub

是的,我运行linux,所以路径应该是正确的。 当我尝试运行此脚本时,它说:

Property or Method not found table2

我当然试过谷歌但不知何故我找不到解决方案。正确方向的提示就足够了,我也猜想我必须写“更多”:

sStartDate = oDoc.getString(table2(1, 4))

或类似的东西。也没工作。我尝试的另一件事是使用(0,3)而不是(1,4)。

如果有人能帮我一点,我会很感激! :) 我希望我已经做好了我在这里发布的所有内容。

Vaelor

编辑: 我已根据第14.9章中的HERE找到PDF,将脚本修改为此。

现在看起来像这样,

  sub save

  oDoc=thisComponent
  Dim oTable
  Dim sTableName As String  

  sTableName = "Table2"

  oTable = oDoc.getTextTables().getByName(sTableName)
  ' oTable = oTables.getByName(sTableName)


 sStartDate = oTable.getCellByPosition(0, 3)
 sEndDate = oTable.getCellByPosition(0, 5)

 sFilename = sStartDate.String & sEndDate.String

 sURL = ConvertToURL("file:///home/cp/Documents/" & sFilename & ".odt")

 msgbox sURL
 ' oDoc.StoreAsURL(sURL, Array())

 end sub

但是,仍然没有工作。现在我得到了这个异常IndexOutOfBoundsException。 (我想链接它,但它说,我不能发布超过2个链接:-()

我的第一个想法是我必须将cels更改为0,3和0,5。更改之后,错误仍然会发生。 : - (

EDIT2: 由于我没有得到回应,我想我会在Python中尝试这个,也许它会产生更好的结果。

1 个答案:

答案 0 :(得分:2)

此代码演示了如何查找具有给定名称的文本表以及如何访问单个单元格。

function get_table_by_name(name as string) as object
    dim oenum as object
    dim oelem as object

    oenum = thisComponent.text.createEnumeration
    while oenum.hasMoreelements
        oelem = oenum.nextElement
        if oelem.supportsService("com.sun.star.text.TextTable") then
            if oelem.Name = name then
                get_table_by_name = oelem
                exit function
            end if
        end if
    wend
end function

Sub Main
    dim table as object

    table = get_table_by_name("Table1")
    if not isNull(table) then
        msgbox "Got " & table.Name & " " & table.getRows().getCount() & "x" & table.getColumns().getCount()
        msgbox "Cell[0,0] is " & table.getCellByPosition(0, 0).getString()
    end if
End Sub