Posted Category 技術的な話題


POIを使う機会がちょこっとあったのであれこれしたのはいいんだけど、
うまくできなかったという話です。

◆前提

  • エクセルでテキストボックスを設置
  • Javaで任意な文字列をそのテキストボックスに突っ込みたい
  • POI 3.8 (3.9でも同じっぽい)
  • Overview (POI API Documentation)

◆関連クラス

  • HSSFWorkBook:ワークブック
  • HSSFWorkSheet:ワークシート
  • HSSFPatriarch:描画領域?
  • HSSFShape:オブジェクトの関係の抽象クラス
  • HSSFSimpleShape:四角とか簡単なオートシェイプとか
  • HSSFTextbox:テキストボックス
  • HSSFClientAnchor:シート上の座標を示す
  • EscherAggregate:これはちょっと違うっぽい
    >> MSODRAWING and OBJ record combinations って書いてあった

◆やったこと
1. エクセルで設置したテキストボックスを操作しよう!

List<HSSFShape> shapes = sheet.getDrawingPatriarch().getChildren();
for (HSSFShape shape : shapes) {
	if (shape instanceof HSSFTextbox) {
		// !!ここにこない!! //
	}
	if (shape instanceof HSSFSimpleShape) {
		// うおーきたー //
		// poi 3.8 //=> Method not found.
		// poi 3.9 //=> エラーは無い。あとでファイルが開けなくなる
		((HSSFSimpleShape) shape).setString(new HSSFRichTextString("hogehoge"));
	}
}

2. テキストボックスはPOIで設置しよう!

HSSFPatriarch patriarch = sheet.getDrawingPatriarch();
HSSFClientAnchor anchor =
	new HSSFClientAnchor(10, 10, 100, 50, (short)1,(short)1,(short)1,(short)1);
HSSFTextbox textBox = patriarch.createTextbox(anchor);
HSSFRichTextString text = new HSSFRichTextString("1");
// フォント設定
// text.applyFont(sheet.getColumnStyle(0).getFont(sheet.getWorkbook()));
textBox.setString(text);

// !なにが原因かわからないけど該当シートがぶっ壊れる! //

◆結論
(◞‸◟)エクセルまぢやみ…