Top > OOobbs > 80

OOobbs/80 Edit

  • サマリ: 外部データへのリンクで使っているマクロについて
  • 環境: Calc
  • 状態: 未解決
  • 投稿者: ニートオヤジ?
  • 投稿日: 2005-11-05 (土) 01:24:02

質問 Edit

どなたかご存知の方がいれば、是非ご教示を。 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です。よろしくお願いします。

回答 Edit

ご報告。 Edit

これで報告になるのか、無作法の体はご容赦の程を。

(さっき書き上げて、更新する前に念の為プレビューしました。ちょっと体裁が悪いところがあるのに気が付いて、何気なくテキスト整形ルールの表示を押してしまいました。悲しい、、、。)

気を取り直して、もう一度。

はにゃさんご指摘の 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 は候補から落ちつつあります。

以上、ご報告まで。  ---ニートオヤジ



Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes