今回はセル中で複数行を使う (Using newlines in cells) です(一覧)。
Java コード
セル中で複数行を使うための Java コード。
Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook(); Sheet sheet = wb.createSheet(); Row row = sheet.createRow(2); Cell cell = row.createCell(2); cell.setCellValue("Use \n with word wrap on to create a new line"); //to enable newlines you need set a cell styles with wrap=true CellStyle cs = wb.createCellStyle(); cs.setWrapText(true); cell.setCellStyle(cs); //increase row height to accomodate two lines of text row.setHeightInPoints((2*sheet.getDefaultRowHeightInPoints())); //adjust column width to fit the content sheet.autoSizeColumn((short)2);
複数行を使うだけなら、必要な設定は CellStyle オブジェクトの wrapText プロパティを true にするだけです。 このサンプルでは、他に
- セルの高さをデフォルト値の2倍にする(Row#setHeightInPoints(), Sheet#getDefaultRowHeightInPoints())
- 行の幅を自動で合わせる(Sheet#autoSizeColumn() メソッド)
といった設定を行っています。
poi-builder による構築
poi-builder によるビルド・スクリプト。
@GrabResolver('http://www5.ocn.ne.jp/~coast/repo/') @Grab('org.waman.tools:poi-builder:0.0.6') import org.waman.tools.poi.SpreadsheetBuilder def workbook = new SpreadsheetBuilder().workbook{ sheet{ row(2, heightInPoints:(2*sheet.defaultRowHeightInPoints)){ cell(2, cellValue:'Use \n with word wrap on to create a new line', cellStyle:cellStyle(wrapText:true)) } sheet.autoSizeColumn(2) } }
CellStyle の wrapText プロパティの設定自体は簡単です。 行、列の幅設定の部分は説明が必要かと。
ビルド・スクリプトではビルダーに定義されているプロパティ・アクセスやメソッドの呼び出しは簡単ですが、構築対象のオブジェクトに対してそれらは直接はできません。 とは言ってもそんなに難しくなくて、通常の FactoryBuilderSupport オブジェクトに対しては current プロパティなどによって構築対象のオブジェクトにアクセスすることができます。
ただし、current プロパティで何のオブジェクトが返されるのかを把握しておかないといけなくてちょっと直感的ではないと思うので、poi-builder では workbook, sheet, row, cell プロパティを(ノードとは別に)定義してあり、対応するオブジェクトを返すようにしています*1。 これらのプロパティでアクセスが可能なのは
プロパティ \ 親ノード | workbook | sheet | row | cell |
---|---|---|---|---|
workbook | ○ | ○ | ○ | ○ |
sheet | × | ○ | ○ | ○ |
row | × | × | ○ | ○ |
cell | × | × | × | ○ |
となってます。 Apache POI の API でたどれるものだけです。 まぁ、workbook ノード下で cell にアクセスしようとしても、どのセルか分かりませんよね。
これらのプロパティでオブジェクトを取得すれば、そのオブジェクトに対してプロパティ・アクセスやメソッド呼び出しは自由にできます。 上記のビルド・スクリプトでは Sheet オブジェクトに対して defaultRowHeightInPoints プロパティにアクセスしたり、autoSizeColumn() メソッドを呼び出したりしたりしてます。
作成されるスプレッドシート
- 作者: 竹添直樹,島本多可子,小津美夕紀,亀井隆司
- 出版社/メーカー: 翔泳社
- 発売日: 2011/07/16
- メディア: 大型本
- 購入: 6人 クリック: 217回
- この商品を含むブログ (20件) を見る
- 作者: 関谷和愛,上原潤二,須江信洋,中野靖治
- 出版社/メーカー: 技術評論社
- 発売日: 2011/07/06
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 392回
- この商品を含むブログ (152件) を見る
*1:今のところプロパティ・アクセスによる値のセットは行えません。