GroovyでExcelの操作その3
前回の「GroovyでExcelの操作その2」の記事で、nobusueさんに「Apache POIもあるよ」と、コメントを頂きました。
せっかく教えて頂いたので、こちらを参考に、POIで同じ事をやってみました。
■実行環境
- Groovy Version: 1.6.3
- JVM: 1.6.0_12
- PC OS: Windows XP SP3
- Apache POI: 3.2
- OS/400: V5R4M0
- JDBCドライバー:AS/400付属のjt400.jar
■インストール
- Apache POIをダウンロードします。
- サイトを選んで、”release/bin/poi-bin-3.2-FINAL-20081019.zip ”から取得します
- poi-bin-3.2-FINAL-20081019.zipを解凍します。
- 解凍したディレクトリの”poi-3.2-FINAL-20081019.jar”と”poi-contrib-3.2-FINAL-20081019.jar”と”poi-scratchpad-3.2-FINAL-20081019.jar”「USER_HOME/.groovy/lib」にコピーします。
- jt400.jarは、前回と同じ「USER_HOME/.groovy/lib」のを使います。
■使ってみて
使ってみるとPOIの方が、やっぱりJavaな感じで(と言うかJavaその物か...)Cellから値を取得する時に、セルのタイプによって使い分ける”get〜CellValue()”メソッドが特徴的です。あとCellを扱う指標が、scriptomとは違い0からになります。scriptomは、Cellインデックスも1からですし、記述自体がVBA的な印象です。
自分は、Java、VBAどちらも得意ではないので、どっちも新鮮な感じがします。
VBAライクなscriptomは、マクロの記録で作成したVBAコードを使って、ドキュメントを読むのを少しサボることが出来きそうです。
POIは100%Javaなので、環境に左右されず使える...
つまり ”IBM i(※以下AS/400)” でも使える。やっぱり全てJavaで完結している方が良いかも。:-)
こうすれば、全てがAS/400上だけで解決する。定型業務でAS/400上のデータベースの情報を「どうしてもExcelで見たいよ」何て事を言うユーザーさんにはイイかも。また逆の下から上も出来ますし。
別にGroovyでなくて、Javaでも良いんですがぁ...(-_-;)ゞ。そこはあえて触れず。
/* マスター作成 */ import groovy.sql.Sql import org.apache.poi.hssf.usermodel.* import org.apache.poi.poifs.filesystem.POIFSFileSystem /** * データ追加処理 **/ def addTable = { def params -> driverClassName = "com.ibm.as400.access.AS400JDBCDriver" username = "USHIDA" password = "********" url = "jdbc:as400://192.168.x.xxx/GRAILSTEST" sql = Sql.newInstance(url, username, password, driverClassName) //レコード追加 def code = params.code def kana = params.kana def name = params.name def hireDate = params.hireDate def stmt stmt = "insert into EMPLOYEE" stmt += " (CODE" stmt += " ,KANA" stmt += " ,NAME" stmt += " ,HIREDATE)" stmt += " values (${code},'${kana}','${name}',${hireDate})" println stmt sql.execute(stmt) } /** * Excel操作 **/ String fileName = new File(".").getAbsoluteFile().getParent() + "/社員一覧.xls" File file = new File(fileName) FileInputStream input = null BufferedInputStream binput = null POIFSFileSystem poifs = null try { // ファイル読み込み input = new FileInputStream(file) binput = new BufferedInputStream(input) poifs = new POIFSFileSystem(binput) HSSFWorkbook workbook = new HSSFWorkbook(poifs) //ブック HSSFSheet sheet = workbook.getSheet("Sheet1") //シート // 最大行 int rowMax = sheet.getLastRowNum() -1 // DB2へ追加 def params = [:] for(ix in 3..rowMax){ HSSFRow row = sheet.getRow(ix) if (row == null) continue params.code = row.getCell(1).getNumericCellValue() as int params.kana = row.getCell(2).getRichStringCellValue().getString() params.name = row.getCell(3).getRichStringCellValue().getString() params.hireDate = new java.text.SimpleDateFormat("yyyyMMdd").format( row.getCell(4).getDateCellValue()) println params addTable(params) } } catch (FileNotFoundException e) { e.printStackTrace() } catch (IOException e) { e.printStackTrace() } finally { try { binput.close() } catch (IOException e) { e.printStackTrace() } }