倭マン's BLOG

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

PoiBuilder で Quick Guide (14) : シートの印刷領域をセットする

今回はシートの印刷領域のセット (Set print area for a sheet) です(一覧)。

Java コード


印刷領域を設定するには、Workbook オブジェクトに対して setPrintArea() メソッドを呼び出します:

    Workbook wb = new HSSFWorkbook();
    Sheet sheet = wb.createSheet("Sheet1");
    //sets the print area for the first sheet
    wb.setPrintArea(0, "$A$1:$C$2");
    
    //Alternatively:
    wb.setPrintArea(
            0, //sheet index
            0, //start column
            1, //end column
            0, //start row
            0  //end row
    );

範囲を指定するには、文字列で指定する方法($A$1:$C:$2)と、インデックスで指定する方法の2通りがあります。

PoiBuilder による構築


PoiBuilder では、印刷領域の設定は printArea ノードで行います

@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{
    sheet('Sheet1')

    printArea(0, '$A$1:$C$2')

    // Alternatively
    // printArea(0, 0, 1, 0, 0)
}

sheet ノード下、もしくは属性で書くと第1引数を書かなくてもいい気がしますが、今のところそうなっていません。 今後改善。

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




追記


printArea ノードに渡す引数が分かりにくいので、poi-builder 0.0.6 からもう少し簡単に範囲を指定できるようにしました:

@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('Sheet1'){
        row(0){
            cell(0, cellValue:1)
        }
    }

    // (1) int 値4つから範囲を指定 引数の順番注意
    //      第1引数はシート名ではなくシート番号でも可。 以下同様。
    printArea('Sheet1', 0, 2, 0, 1)

    // (2) String で範囲を指定 '$A$1:$C$2' でも可
    printArea('Sheet1', 'A1:C2')

    // (3) 属性 row, column で範囲を指定 属性値は IntRange
    printArea('Sheet1', column:0..2, row:0..1)

    // (4) cellRangeAddress ノードによって CellRangeAddress オブジェクトを生成
    printArea('Sheet1', cellRangeAddress(column:0..2, row:0..1))
}

どの方法でも、第1引数は文字列ならシート名、int 値ならシート番号とみなしてシートをしていします。 それ以降の引数(もしくは属性)は領域の範囲を指定します。 範囲指定を行う方法は

  • int 値4つによる範囲指定。 Workbook#setPrintArea() メソッドと同様、第2引数以降の順番は
      (最初の列, 最後の列, 最初の行, 最後の行)
    となっています。
  • String による範囲指定。 'A1:C2' や '$A$1:$C$2' のようなもの。
  • row, column 属性による範囲指定。 属性値は IntRange
  • CellRangeAddress オブジェクトによる指定

です。 下2つは cellRangeAddress ノードも参照()。 また、最初の int 値4つによる範囲の指定と cellRangeAddress ノードに渡して範囲を指定する int 値4つは順序が違うので注意。 これは Apache POI に合わせてます。 紛らわしい場合は String による指定か、row, column 属性による指定を使うといいかと思います。

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

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


プログラミングGROOVY

プログラミングGROOVY