今回はファイルからの読み込み (Reading and Rewriting Workbooks) です(一覧)。 書き出しは Workbook#write() メソッドを使えばいいので省略。
Java コード
Excel ファイル「workbook.xls」を読み込んでワークブック・オブジェクトを取得するサンプル:
InputStream inp = new FileInputStream("workbook.xls"); //InputStream inp = new FileInputStream("workbook.xlsx"); Workbook wb = WorkbookFactory.create(inp); Sheet sheet = wb.getSheetAt(0); Row row = sheet.getRow(2); Cell cell = row.getCell(3); if (cell == null) cell = row.createCell(3); cell.setCellType(Cell.CELL_TYPE_STRING); cell.setCellValue("a test");
読み込んだ後で、特定の位置のセルを取得し、セルが生成されてなければ作り、内容を適当にセットしています。
PoiBuilder による構築
では、PoiBuilder による構築。 ファイルからワークブックを読み込むには workbook ノードにファイル名やInputStream を渡すだけです。 また、既に存在するシートや行 (Row) 、セル (Cell) にさらに構築を行いたい場合は、対応するノードに構築を行いたいオブジェクトを渡します:
@GrabResolver('http://www5.ocn.ne.jp/~coast/repo/') @Grab('org.waman.tools:poi-builder:0.0.5') import org.waman.tools.poi.PoiBuilder def builder = new PoiBuilder() def workbook = builder.workbook('workbook.xls') def row = workbook.getSheetAt(0)?.getRow(0) // 適当な行を取得 def c = row.getCell(4) builder.row(row){ // 既に存在する行に対して構築を行う cell(4, cellValue:'a test', cellType:CELL_TYPE_STRING) }
このコードでは「workbook.xls」ファイルから Excel シートを読み取り、適当な行 (Row) を取得した後、既に存在している行に対して構築を行っています。 この構築での cell ノードは、もし既に対応しているセルが存在しているならそのセルに適用され、対応するセルが存在しないなら新たにセルが生成されて、それに対して構築が行われます。
上記のコードはもう少しビルダーだけを使って書けて、
@GrabResolver('http://www5.ocn.ne.jp/~coast/repo/') @Grab('org.waman.tools:poi-builder:0.0.5') import org.waman.tools.poi.PoiBuilder def workbook = new PoiBuilder().workbook('workbook.xls'){ sheet(0){ row(0){ cell(4, cellValue:'a test', cellType:CELL_TYPE_STRING) } } }
のようにできます。 sheet, row, cell はどれも、対応するオブジェクトがあればそれに対して構築が行われ、ないなら新たにオブジェクトを生成して構築が行われます。 あと、sheet ノード整数を渡せば、getSheetAt() が呼び出されます。
作成されるスプレッドシート
- 作者: 竹添直樹,島本多可子,小津美夕紀,亀井隆司
- 出版社/メーカー: 翔泳社
- 発売日: 2011/07/16
- メディア: 大型本
- 購入: 6人 クリック: 217回
- この商品を含むブログ (20件) を見る
- 作者: 関谷和愛,上原潤二,須江信洋,中野靖治
- 出版社/メーカー: 技術評論社
- 発売日: 2011/07/06
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 392回
- この商品を含むブログ (152件) を見る