<このシリーズの、前の記事 | このシリーズの目次 | このシリーズの、次の記事>
LibreOfficeまたはApache OpenOfficeのCalcスプレッドシートを拡張機能を通してJavaまたはマクロプログラムから操作する(読むまたは書く)方法を知る
スプレッドシートセルフォーマットプロパティをいくつかセットしたのと同じように、スプレッドシートセル内の部分文字列にもいくつかのフォーマットプロパティをセットすることができる。
なるほど。
ここでも、すべてのフォーマットプロパティを列挙することには私は興味がなく、我々にとって役立つと思われるいくつかのフォーマットプロパティのみについて話す。
オーケー。
我々は以下のプロパティのみを扱う。
- フォント色
- フォント名
- フォントサイズ
- フォントの姿勢
- フォントの太さ
- テキストアンダーライン(下線)のスタイル
- テキストアンダーライン(下線)の色が自動かどうか
- テキストアンダーライン(下線)の色
- テキストオーバーライン(上線)のスタイル
- テキストオーバーライン(上線)の色が自動かどうか
- テキストオーバーライン(上線)の色
- テキスト取り消し線のスタイル
以上のものは、スプレッドシートセルフォーマットプロパティ群の部分集合だな。当然ながら、部分文字列にはボーダーラインといったプロパティがない。
そう。名称とセットする値はスプレッドシートセルフォーマットプロパティのものと同じだからここには挙げない。
いいだろう。
スプレッドシートセル文字列フォーマットプロパティは、セルUNOオブジェクトから得た'com.sun.star.text.XTextCursor'インスタンスを使って操作できる。
なるほど。
このカーソルUNOオブジェクトのUNOコンポーネントは'com.sun.star.beans.XPropertySet'UNOインターフェースを実装しており、このUNOインターフェース用のUNOプロキシを得て、スプレッドシートセルフォーマットプロパティについて行なったのと同じことをすればよい。
しかしながら、実は、なぜだか分からないが、 テキストアンダーライン色はうまくセットできなかった。
どのようにできなかったのか?
不思議に。
テキストアンダーライン色をセットしようとすると何が起きるのかを聞いている。
どんな色をセットしようとも、アンダーラインは白になる。
オーバーライン色はうまくセットできるのにか?
そう。アンダーラインだけが白になる。
それは不思議だ。
白だと普通見えないので、当面は、テキストアンダーラインの色は自動にすることにする。アンダーラインに色を付ける必要性は我々には全然ないので、問題はないだろう。
オーケー。
結局、前記事のコードの後に以下のコードを書いた。
l_textCursor.gotoStart (false);
l_textCursor.goRight ( (short) 1,false);
l_textCursor.goRight ( (short) 2,true);
XPropertySet l_textCursorInXPropertySet = (XPropertySet) UnoRuntime.queryInterface (XPropertySet.class, l_textCursor);
l_textCursorInXPropertySet.setPropertyValue ("CharColor", new Integer ( (new Color (0, 255, 0)).getRGB ()));
l_textCursorInXPropertySet.setPropertyValue ("CharFontName", "Liberation Mono");
l_textCursorInXPropertySet.setPropertyValue ("CharHeight", new Float (16.0F));
l_textCursorInXPropertySet.setPropertyValue ("CharPosture", FontSlant.ITALIC);
l_textCursorInXPropertySet.setPropertyValue ("CharWeight", new Float (FontWeight.BOLD));
l_textCursorInXPropertySet.setPropertyValue ("CharUnderline", new Short (FontUnderline.DOTTED));
l_textCursorInXPropertySet.setPropertyValue ("CharUnderlineHasColor", new Boolean (false));
//l_currentSpreadSheetCellInXPropertySet.setPropertyValue ("CharUnderlineColor", new Integer ( (new Color (0, 0, 255)).getRGB ()));
l_textCursorInXPropertySet.setPropertyValue ("CharOverline", new Short (FontUnderline.BOLDDOTTED));
l_textCursorInXPropertySet.setPropertyValue ("CharOverlineHasColor", new Boolean (true));
l_textCursorInXPropertySet.setPropertyValue ("CharOverlineColor", new Integer ( (new Color (255, 0, 0)).getRGB ()));
l_textCursorInXPropertySet.setPropertyValue ("CharStrikeout", new Short (FontStrikeout.DOUBLE));
いいだろう。