2017年7月29日土曜日

28: スプレッドシートセル文字列フォーマット(フォーマットプロパティ)を得たりセットしたりする

<このシリーズの、前の記事 | このシリーズの目次 | このシリーズの、次の記事>

Main body START

LibreOfficeまたはApache OpenOfficeのCalcスプレッドシートを拡張機能を通してJavaまたはマクロプログラムから操作する(読むまたは書く)方法を知る

スプレッドシートセル文字列フォーマットをどのように得たりセットしたりできるか?

-Hypothesizer

スプレッドシートセルフォーマットプロパティをいくつかセットしたのと同じように、スプレッドシートセル内の部分文字列にもいくつかのフォーマットプロパティをセットすることができる。

-Rebutter

なるほど。

-Hypothesizer

ここでも、すべてのフォーマットプロパティを列挙することには私は興味がなく、我々にとって役立つと思われるいくつかのフォーマットプロパティのみについて話す。

-Rebutter

オーケー。

-Hypothesizer

我々は以下のプロパティのみを扱う。

  • フォント色
  • フォント名
  • フォントサイズ
  • フォントの姿勢
  • フォントの太さ
  • テキストアンダーライン(下線)のスタイル
  • テキストアンダーライン(下線)の色が自動かどうか
  • テキストアンダーライン(下線)の色
  • テキストオーバーライン(上線)のスタイル
  • テキストオーバーライン(上線)の色が自動かどうか
  • テキストオーバーライン(上線)の色
  • テキスト取り消し線のスタイル
-Rebutter

以上のものは、スプレッドシートセルフォーマットプロパティ群の部分集合だな。当然ながら、部分文字列にはボーダーラインといったプロパティがない。

-Hypothesizer

そう。名称とセットする値はスプレッドシートセルフォーマットプロパティのものと同じだからここには挙げない。

-Rebutter

いいだろう。

-Hypothesizer

スプレッドシートセル文字列フォーマットプロパティは、セルUNOオブジェクトから得た'com.sun.star.text.XTextCursor'インスタンスを使って操作できる。

-Rebutter

なるほど。

-Hypothesizer

このカーソルUNOオブジェクトのUNOコンポーネントは'com.sun.star.beans.XPropertySet'UNOインターフェースを実装しており、このUNOインターフェース用のUNOプロキシを得て、スプレッドシートセルフォーマットプロパティについて行なったのと同じことをすればよい。

しかしながら、実は、なぜだか分からないが、 テキストアンダーライン色はうまくセットできなかった。

-Rebutter

どのようにできなかったのか?

-Hypothesizer

不思議に。

-Rebutter

テキストアンダーライン色をセットしようとすると何が起きるのかを聞いている。

-Hypothesizer

どんな色をセットしようとも、アンダーラインは白になる。

-Rebutter

オーバーライン色はうまくセットできるのにか?

-Hypothesizer

そう。アンダーラインだけが白になる。

-Rebutter

それは不思議だ。

-Hypothesizer

白だと普通見えないので、当面は、テキストアンダーラインの色は自動にすることにする。アンダーラインに色を付ける必要性は我々には全然ないので、問題はないだろう。

-Rebutter

オーケー。

-Hypothesizer

結局、前記事のコードの後に以下のコードを書いた。

   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));
-Rebutter

いいだろう。

Main body END

<このシリーズの、前の記事 | このシリーズの目次 | このシリーズの、次の記事>