倭マン's BLOG

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

PoiBuilder で Quick Guide (15) : シートのフッターにページ番号をセットする

今回はシートのフッターにページ番号をセットする (Set page numbers on the footer of a sheet) です(一覧)。

Java コード


ヘッダーやフッターを設定するためには、Sheet オブジェクトの getHeader() / getFooter() メソッドで Header / Footer オブジェクトを取得し、setLeft() / setCenter() / setRight() メソッドでそれぞれの内容をセットします:

    Workbook wb = new HSSFWorkbook(); // or new XSSFWorkbook();
    Sheet sheet = wb.createSheet("format sheet");
    Footer footer = sheet.getFooter();

    footer.setRight( "Page " + HeaderFooter.page() + " of " + HeaderFooter.numPages() );

HeaderFooter クラスの static メソッドをいくつか呼び出してますが、これらのメソッドによって返される文字列によって、ページ番号などをメタに参照することができます。

PoiBuilder による構築


PoiBuilder では、sheet ノード下の header / footer ノードによってヘッダー、フッターを取得、設定できます。 内容は left / center / right 属性で対応するものをセットします:

@GrabResolver('http://www5.ocn.ne.jp/~coast/repo/')
@Grab('org.waman.tools:poi-builder:0.0.5')

import org.waman.tools.poi.PoiBuilder
import org.apache.poi.hssf.usermodel.HeaderFooter

def workbook = new PoiBuilder().workbook{
    sheet('format sheet'){
        footer(right:"Page ${HeaderFooter.page()} of ${HeaderFooter.numPages()}")
    }
}

ページ番号の取得などは、Java コードと同様に HeaderFooter クラスの static メソッドを呼び出します。

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


生成されたスプレッドシートの印刷プレビューを拡大したところ:


追記


poi-builder 0.0.6 から、header / footer に指定する left / center / right の内容にプレースホルダーを指定して HeaderFooter.page() を $page と書いたりできるようにしました:

@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('format sheet'){
        footer(right:'Page $page of $numPages')
    }
}

プレースホルダーの使い方は Groovy のテンプレートと同じです。 必要なら中括弧を使って ${page} のように使ってください。 使用できるプレースホルダーは org.apache.poi.hssf.usermodel.HeaderFooter に定義されている static メソッドのうち引数のないものです:

プレースホルダ 説明
date 日付
endBold ボールドの終了
endDoubleUnderline 二重下線の終了
endUnderline 下線の終了
file ファイル名
numPages ページ数
page 現在のページ番号
startBold ボールドの開始
startDoubleUnderline 二重下線の開始
startUnderline 下線の開始
tab シート名
time 現在の時間

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

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


プログラミングGROOVY

プログラミングGROOVY