2011/09/27

[groovy] GExcelAPIを使ってExcelのデータを取得してみた

概要

kimukouさんに教えて頂いた、nobeansさんが開発されたGExcelAPIを使用してExcelのデータを取得してみました。

内容

nobeansさんが作成したサンプルほぼそのままですが、以下コード例です。
  1. import org.jggug.kobo.gexcelapi.GExcel  
  2. @GrabResolver(name="kobo-maven-repo", root="https://github.com/kobo/maven-repo/raw/master/release")  
  3. @Grab("org.jggug.kobo:gexcelapi:0.2")  
  4.   
  5. class GExcelApiTest {  
  6.   
  7.     void load(String fileName) {  
  8.   
  9.         // Excelファイルを読込む  
  10.         def book = GExcel.open(fileName)  
  11.   
  12.         // シートを取得する  
  13.         def sheet = book[0]  
  14. //        def sheet = book["Sheet1"] // シート名でも取得可能  
  15.   
  16.         // セルの値を取得する  
  17.         println sheet.A1.value  
  18.         println sheet.A2.value  
  19.   
  20.         println "-"*20  
  21.         def dump = { cell -> println "${cell.label}: ${cell.value} - ${cell.cellType}" }  
  22.         sheet.A_.each{ cell -> dump cell }  
  23.         println "-"*20  
  24.         sheet.B_.each{ cell -> dump cell }  
  25.         println "-"*20  
  26.         sheet._1.each{ cell -> dump cell }  
  27.         println "-"*20  
  28.         sheet._2.each{ cell -> dump cell }  
  29.         println "-"*20  
  30.         sheet.A1_B6.each{ row -> row.each { cell -> dump cell } }  
  31.     }  
  32. }  
実行結果
  1. 123.0  
  2. 水曜日  
  3. --------------------  
  4. A1: 123.0 - 0  
  5. A2: 水曜日 - 1  
  6. A3: true - 4  
  7. A4: 40808.0 - 0  
  8. A5:   - 1  
  9. A6: 1+1 - 2  
  10. --------------------  
  11. B1: null - 3  
  12. B2: null - 3  
  13. B3: null - 3  
  14. B4: null - 3  
  15. B5: null - 3  
  16. B6: null - 3  
  17. --------------------  
  18. A1: 123.0 - 0  
  19. B1: null - 3  
  20. C1: null - 3  
  21. D1: null - 3  
  22. --------------------  
  23. A2: 水曜日 - 1  
  24. B2: null - 3  
  25. --------------------  
  26. A1: 123.0 - 0  
  27. B1: null - 3  
  28. A2: 水曜日 - 1  
  29. B2: null - 3  
  30. A3: true - 4  
  31. B3: null - 3  
  32. A4: 40808.0 - 0  
  33. B4: null - 3  
  34. A5:   - 1  
  35. B5: null - 3  
  36. A6: 1+1 - 2  
  37. B6: null - 3  
様々なイテレーターが用意されており、簡単にセルの値を取得することができました。

cell.valueで簡単にセルの値を取れます。
POIでやると、セルタイプに沿ったメソッドを実行して値を取らなきゃいけなかったり、
煩雑な部分が多かったですが、こちらは非常にシンプルで使いやすいです。

Excelデータの中身をさらしてはいませんが、実行結果のA4セルには日付を設定しています。
日付を出力して欲しかったのですが、数値が表示されました。
日付が取得できなかったのは少し残念ですが、非常に強力かつ便利なAPIなので今後も使っていきたいです。

これを使って、Excelから情報をDTOに格納し、テンプレートエンジンを使ってソースコードを自動生成するようなスクリプトでも書いてみようと思います。

2 件のコメント:

  1. DTOを使うというアプローチの場合は

    Groovy + XLSBeans でエクセルから HTML に流し込み
    http://another.maple4ever.net/archives/1515/

    という別のアプローチもあるみたいですね。
    一応参考まで

    返信削除
  2. >kimukouさん

    >Groovy + XLSBeans でエクセルから HTML に流し込み
    こんなやり方もあるんですね。

    色々やり方があって、実に奥が深いですね。
    勉強になります。

    返信削除