概要
GroovyからApache POIを使用してExcelのデータを読んでみました。Excel持ってないので、OpenOfficeで作成したExcelデータですが。。。
内容
groovyでPOIを使用してセルのデータを読むコードをこんな感じで書いてみました。- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.DateUtil;
- import org.apache.poi.ss.usermodel.Row;
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.apache.poi.ss.usermodel.WorkbookFactory;
- class POIUtils {
- static def getCellValue(Sheet sheet, rowNum, colNum) {
- // nullセーフナビゲーションを使用してセルにアクセスする
- Cell cellObj = sheet?.getRow(rowNum)?.getCell(colNum)
- switch (cellObj) {
- case null:
- ""
- break;
- default:
- switch (cellObj.cellType) {
- case Cell.CELL_TYPE_NUMERIC:
- if (DateUtil.isCellDateFormatted(cellObj)) {
- cellObj.getDateCellValue()
- } else {
- cellObj.getNumericCellValue()
- }
- break;
- case Cell.CELL_TYPE_BLANK:
- ""
- break;
- case Cell.CELL_TYPE_BOOLEAN:
- cellObj.getBooleanCellValue()
- break;
- case Cell.CELL_TYPE_ERROR:
- ""
- break;
- case Cell.CELL_TYPE_FORMULA:
- cellObj.getCellFormula()
- break;
- case Cell.CELL_TYPE_STRING:
- cellObj.getStringCellValue()
- break;
- }
- }
- }
- }
上記を呼び出すソースは以下。
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.apache.poi.ss.usermodel.WorkbookFactory;
- class Startup {
- static void main(args) {
- // ローンパターンを使用し、ストリーム使用後に安全にクローズする
- new FileInputStream("./resources/test.xls").withStream {fis ->
- Sheet sheet = WorkbookFactory.create(fis).getSheetAt(0)
- println(POIUtils.getCellValue(sheet, 0, 0));
- // groovy版のループを使用し、1行目から10行目までのセルの値を書き出す
- // TODO クロージャ内でfor文が使えない!!!
- // なぜかorg.codehaus.groovy.control.MultipleCompilationErrorsExceptionが発生。。。
- for (def i in 0..<10) {
- println(i.toString())
- }
- }
- }
- }
- // for (def i in 0..<10) {
- // println(i.toString())
- // }
- 10.times {
- println(POIUtils.getCellValue(sheet, it, 0));
- }
- for (int i = 0; i < 10; i++) {
- println(POIUtils.getCellValue(sheet, i, 0))
- }
クロージャ内の制御文は失敗する仕様なのかも知れない。。。
原因分かればまた追記します。
ただ単に構文ミスってようです。
これで動作しました。
GExcelAPIというnobeansさんという世界的にも有名な開発者の方
返信削除(勿論fumokmmさんと同じJGGUGのスタッフ)
が作られたGroovyのpoiのラッパーが既にありますので
そちらを使われると大分楽になります。
http://d.hatena.ne.jp/nobeans/20101216/1292513322
自分が試した例等は
https://gist.github.com/1216787
https://gist.github.com/1221382
あたり
あともう少し勉強を進めていくと
SwingBuilderというSwingのラッパー辺りを触ると楽しくなると思います
<kiy0takaさんというJGGUGの方が一番詳しいです
kimukouさん
返信削除>GExcelAPIというnobeansさんという世界的にも有名な開発者の方
(勿論fumokmmさんと同じJGGUGのスタッフ)
既にPOIのラッパーがあったんですね。
サンプル等を見てみると使いやすそうで、すてきな感じですね。