よろずやネット

最近はLibreofficeにハマっています。

フォントの色 CharColor

… 前回の続き …

フォントの色設定にトライした。
http://api.openoffice.org/docs/common/ref/com/sun/star/style/CharacterProperties.html
上記ページには、プロパティとして、CharColor というのがある。

あるにはあるのだが、リンクをたどってみても、意味がわからない。
::com::sun::star::util::Color という構造体(?)の値らしいことはわかるが、それ以上のことはわからない。

Calc(カルク)で文字の色を変える動作をマクロ自動記録でチェックした。
(下記のコードは文字を赤色にした場合)

*****マクロ自動記録結果 ここから*****
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Color"
args2(0).Value = 16711680
dispatcher.executeDispatch(document, ".uno:Color", "", 0, args2())
*****マクロ自動記録結果 ここまで*****

16711680 という意味不明の数字を発見した。
Visual Basic .Netで、この数字を下記のように利用してみた。

oSheet.getCellByPosition(0,0).CharColor=16711680

確かに文字色は「赤」になった。
なぜ「赤」が 16711680 なのか… なんでだ~!
ムカムカ状態に突入である。

悩んだあげく、試しに、Visual BasicのRGB関数を下記のようにつかってみた。
oSheet.getCellByPosition(0,0).CharColor = Microsoft.VisualBasic.RGB(255,0,0)

エラーは発生しないのだが、RGB(255,0,0)で赤100%を指定しているにもかかわらず、文字が青になるではないか!
ムカムカの極致!

こんな時は、ドラえもんのポケット、OOoForumだ。
http://www.oooforum.org/

しかし・・・
OOoForumでもヒットしない。

・・・・・・悪戦苦闘の数時間後・・・・・・

関連ありそうな記事に貼り付けてあるリンクを追いかけて、やっとのことで見つけたぞ。
(なんせ、OOoForumは全て英語なのだ。集中力を全員集合させなければならないのだ)

そして、それが、Visual Basic .Net用、オープンオフィスRGB関数だ。

Public Function OOoRGB(ByVal redV As Integer, ByVal greenV As Integer, ByVal blueV As Integer) As Integer
    OOoRGB = ((redV And 255) * 65536) + ((greenV And 255) * 256) + (blueV And 255)
End Function

この関数は、現在のところYahooでもGoogleでも見つけてくれない貴重な関数だ。
(私の探し方が悪いだけなのかもしれないが…)

次のコードを書いて、
oSheet.getCellByPosition(0,0).CharColor=OOoRGB(255,0,0)
早速Runさせてみる。

ヨッシャ!ちゃんと文字が赤くなっているぞ。
この関数を使えば、VBのRGB関数のように色指定が可能だ。

あ~、ちかれたっ。

… 次回へ続く …