2

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

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

这个德国网站正在做我想做的事情,但使用的是 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)。

好吧,如果有人可以帮助我,我将不胜感激!:) 我希望我已经按照我在这里发布的方式正确地完成了所有事情。

韦洛

编辑:根据在第14.9章中找到的 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 中尝试这个,也许它会产生更好的结果。

4

1 回答 1

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
于 2013-06-17T18:17:48.793 回答