#freeze
* [[Jakarta POI]]
JavaからExcelを操作できます。Jcomはcomを経由して、Excelオブジェクトを操作していましたが、こちらはExcelがインストールされてなくてもExcelファイルが操作できます。すっかりJcomはつかわなくなりましたが、POIがでるまで大変便利に使わせていただきました。poi-bin-3.0.1-FINAL-20070705.zipがでてますね。(2007/09/10)
#contents
** 設定
http://jakarta.terra-intl.com/poi/のダウンロードから poi-bin-2.5.1-final-20040804.zipをダウンロードしました。
http://www.apache.org/dist/jakarta/poi/release/bin/
** サンプル
テンプレートのページを作っておき、それを複製して値をセットして出来上がったら新しいExcelファイルとして保存してます。
// 印刷
public boolean Print() {
try {
intPage = 0;
FileInputStream ExcelFile = new FileInputStream("hoge.xls");
POIFSFileSystem fs = new POIFSFileSystem(ExcelFile);
HSSFWorkbook workbook = new HSSFWorkbook(fs);
HSSFSheet newSheet = workbook.getSheetAt(0);
// 先に次ページを複製 図形はだめみたい。JExcelApiはできるそうな。
workbook.cloneSheet(intPage);
//シート名をセット
workbook.setSheetName(intPage, String.valueOf(intPage + 1));
// 選択
workbook.getSheetAt(intPage).setSelected(true);
newSheet = workbook.getSheetAt(intPage);
// 各セルをマージする。
setMerge(newSheet);
//値をセット
setCellValue(newSheet, 1, 2, "ほげ");
//テンプレートページを消す
workbook.removeSheetAt(intPage + 1);
//新しいファイルに書き込み
FileOutputStream out = new FileOutputStream("hogenew.xls");
workbook.write(out);
out.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
// セルのマージ
private void setMerge(HSSFSheet newSheet) {
// タイトル Row1Col2からRow1Col4までをマージしている。
newSheet.addMergedRegion(new Region(1 - 1, (short) (2 - 1), 1 - 1, (short) (4 - 1)));
}
//値をセット 以下はオーバロード
private void setCellValue(HSSFSheet newSheet, int Row, int Col, String value) {
if (value == null) {
value = " ";
}
newSheet.getRow(Row - 1).getCell((short) (Col - 1)).setEncoding(HSSFCell.ENCODING_UTF_16); //日本語用
newSheet.getRow(Row - 1).getCell((short) (Col - 1)).setCellValue(value);
}
private void setCellValue(HSSFSheet newSheet, int Row, int Col, int value) {
newSheet.getRow(Row - 1).getCell((short) (Col - 1)).setCellValue(value);
}
private void setCellValue(HSSFSheet newSheet, int Row, int Col, long value) {
newSheet.getRow(Row - 1).getCell((short) (Col - 1)).setCellValue(value);
}
private void setCellValue(HSSFSheet newSheet, int Row, int Col, float value) {
newSheet.getRow(Row - 1).getCell((short) (Col - 1)).setCellValue(value);
}
** リンク
http://www.stackasterisk.jp/tech/java/poi01_01.jsp
** 参考書籍
** コメント
-#comment