倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

PoiBuilder で Quick Guide (11) : ファイルからの読み込み

今回はファイルからの読み込み (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() が呼び出されます。

作成されるスプレッドシート





現場で使えるJavaライブラリ

現場で使えるJavaライブラリ


プログラミングGROOVY

プログラミングGROOVY