2

OpenOfficeドキュメント(Calcではなくライター)のテーブルから2つの日付(dd.mm.yyyy)を文字列として受け取るマクロを作成しました。これらの 2 つの日付は、ddmmyyyy-ddmmyyyy にマージする必要があります。これをファイル名として使用する必要があります。

テーブルには 1 つの行と 6 つの列しかなく、最初の日付は table2:D1:D1 にあり、2 番目の日付は table2:F1:F1 にあります。これを table2(1, 4) と table2(1, 6) に「翻訳」しました

このドイツのサイトは私がやりたいことをやっていますが、OOWriter ではなく OOCalc ドキュメントのスプレッドシートを使用しています。

十分な話、これが私のコードです:

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))

または似たようなもの。どちらも機能しませんでした。私が試したもう 1 つのことは、(1, 4) の代わりに (0, 3) を使用することでした。

誰かが私を少し助けてくれれば幸いです!:)そして、ここに投稿した方法ですべてを正しく行ったことを願っています。

ヴァエロ

編集: 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つ以上のリンクを投稿することはできません:-( )

最初に考えたのは、セルを 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 に答える