3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(OpenOffice Basic)Calcでセルのハイパーリンクを作る方法

OpenOffice3.2 Basic で Calc のセルのハイパーリンクを作る方法です。

とりあえず、Sheet1.B2セルに、Sheet2.A2セルへのリンクするサンプルコートです。

'リンク元シート取得

Dim oSheet As Object

oSheet = StarDesktop.CurrentComponent.Sheets.getByName("Sheet1")

Dim oCell As Object

'リンク先シート

Dim LinkSheetName As String

LinkSheetName = "Sheet2"

'DispatchHelper サービスを利用するための準備

dim documentFrame as Object

dim documentView as Object

dim dispatcher as Object

documentView = ThisComponent.CurrentController

documentFrame = documentView.Frame

dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

'セル取得

oCell = oSheet.getCellByPosition( 1 , 1 )

'セルの文字列(ここで定義した文字列はリンクにならない)

oCell.Formula = "ここはリンク文字れではない。"

'ハイパーリンクのためのプロパティを定義

dim setHyperLinkArgs(1) as new com.sun.star.beans.PropertyValue

'ハイパーリンクであること定義

setHyperLinkArgs(0).Name = "Hyperlink.Text"

'リンクに表示する文字列

setHyperLinkArgs(0).Value = " ここはリンク文字。"

setHyperLinkArgs(1).Name = "Hyperlink.URL"

'リンク先。今回は Sheet2.A2 セルになる。

setHyperLinkArgs(1).Value = "#" & LinkSheetName & ".A2"

documentView.Select oCell

'実行

dispatcher.executeDispatch(documentFrame, ".uno:SetHyperlink", "", 0, setHyperLinkArgs())

要はDispatchHelper サービスを使って、ハイパーリンク用のプロパティに値をいれるだけで構わないようです。

ただ問題なのは、ハイパーリンクを設定すると数式が入らないということです。

Excelだと、ハイパーリンクを張るセルに数式が入ってもうまく動作しますが、どうもCalcはそれが無理っぽいですね。

つまり、数式が入っているセルにはハイパーリンクは事実上張れないということですね。

あと、Excelではセル全体がリンクになりますが、Calcはセル内の任意の文字だけリンクにする(Valueプロパティ)ということができます。

参考:

小泉守義のPHPソースコードウォッチ - OpenOffice Basic を書いてみた