2013-03-04 3 views
1

Я написал макрос, который должен взять два Dates (dd.mm.yyyy) в виде строки из таблицы в документе OpenOffice (Writer, а не Calc). Эти два Даты следует объединить с этим: ddmmyyyy-ddmmyyyy. Тогда это должно использоваться как имя файла.Макрос OpenOffice для доступа к содержимому таблицы

Таблица содержит только одну строку и 6 столбцов, первая дата находится в таблице 2: D1: D1, а вторая в таблице 2: 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 

Я конечно попробовал Google, но так или иначе я не смог найти решение. Намек в правильном направлении могло бы быть достаточно, я догадался, что я должен написать «больше»:

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

или что-то подобное. Не работает. Другое дело, что я пытался использовать (0, 3) вместо (1, 4).

Хорошо, я был бы признателен, если бы кто-то мог мне помочь! :) И я надеюсь, что я сделал все правильно, как я разместил здесь.

Vaelor

EDIT: Теперь я изменил сценарий к этому, в соответствии с PDF содержится в главе 14.9 HERE.

Это выглядит так,

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. (Я хотел связать его, но он говорит, что я не могу опубликовать более двух ссылок :-()

Моя первая мысль заключалась в том, что мне нужно было сменить cels на 0, 3 и 0, 5. После этого, ошибка все еще происходит :-(

edit2:. Поскольку я не получил никакого ответа, я думаю, я буду стараться это в Python, может быть, это дает лучшие результаты

ответ

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 
+0

О, вау, большое спасибо! Некоторое время я отсутствовал, и я не ожидал, что кто-то ответит на это больше! Я попробую, как только смогу! – Vaelor