OOobbs/80
質問
どなたかご存知の方がいれば、是非ご教示を。 Calc から Web 上の URL を指定して、そのページ上の特定の表(<table>....</table>)を Calc 上の表(シート)に貼り付けるためのOOoBasic コードを書こうとしています。機能的には Calc の「挿入」→「外部データへのリンク」でやっていることと同じです。(ExcelVBA でいうと QueryTable object を使う URL 上の検索と同じです。) どの Object, API を使うのかご存知の方、よろしくご教示を。 参考までに、Wiki, api.openoffice.org, StarOffice Programming Tutorial 等を探し回りましたが、見つけられませんでした。そこでカンニング同然ですが、「外部へのリンク」をマクロに記録して中身を覗いて真似して見ましたがダメでした。リンクができません。記録したマクロを覗いてみると、uno:InsertExternalDataSourceを使っているのがわかりますが、この uno は api.openoffice.org には見当たりませんでした。 私の動作環境は OOo2.0/WinXPです。よろしくお願いします。 回答
ご報告。
これで報告になるのか、無作法の体はご容赦の程を。 (さっき書き上げて、更新する前に念の為プレビューしました。ちょっと体裁が悪いところがあるのに気が付いて、何気なくテキスト整形ルールの表示を押してしまいました。悲しい、、、。) 気を取り直して、もう一度。 はにゃさんご指摘の OOoForum の内容と試行錯誤の結果わかった範囲で報告します。 (1) insertExternalDataSource の資料 どうやらどこにも無いようです。諦めました。 (2) insertExternalDataSource の使い方 基本的には、記録したマクロの内容、OOoFurum の投稿内容と同じでした。 dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") dim args(2) as new com.sun.star.beans.PropertyValue args(0).Name = "FileName" args(0).Value = "http://aaaaa.bbbb.co.jp/xxxxxx?Key=abcd args(1).Name = "FilterName" args(1).Value = "calc_HTML_WebQuery" args(2).Name = "Source" args(2).Value = "HTML_tables" dispatcher.executeDispatch(oDoc, ".uno:InsertExternalDataSource", "", 0, args()) args(0).Value でほしいデータがある Web page の URL を HTML の Get method 形式で埋めて、 args(2).Value でその Page の中にある取り込みたい表の名前または番号を指定します。最後に Dispatch しますが、運がよければうまく行きます。正確な原因は不明ですが、うまくいったり行かなかったり。OOoForum の投稿者その他の話を総合すると、 Dispatch 自体が非同期動作をするため動作が不安定になることがあり、可能なら Dispatch は避けるに越したことはないとのアドバイスでした。他に方法があるか、もう少しだけ探して見ます。 (3) おまけ 次のようにすると運がよければ、定期的(下の例では 60 秒毎)に更新します。 Dim args(3) as new.... 途中略 args(3).Name = "Refresh" args(3).Value =60 ただし、うまく行っちゃうと後が大変です。更新が始まると OOo(Calc etc) が固まります。(一分毎にキーボードもマウスも数秒間固まります。)Calc を終了して再びスタートしても更新し続けます。これを止めるには、 ThisComponent.AreaLinks(0).RefreshDelay = 0 を各々の Dispatch 毎に実行する必要があるのですが、例によって動作が不安定なので、一回では殺せません。何回か(コノォ、コノォ、コノォ、、、と)繰り返すと、やっと一つ止めることができます。こんなこともあって、insertExternalDataSource は候補から落ちつつあります。 以上、ご報告まで。 ---ニートオヤジ |