GroovyでExcelの操作その2
「ExcelのシートをAS/400のDB2へ上げる」の続きです。
Scriptomは、JACOBというcomコンポーネントを扱えるJavaライブラリーを内部で使って、動作しているよう?jacobもscriptomもよく解ってません。
Scriptom.inApartmentメソッドにクロージャを渡す形で、COMコンポーネントが扱える様です。サンプルなどをみると記述は、そのままVBAの構文に近い形で使えそうです。VBAの構文なんてスッカリ忘れてしまったので、マクロの記録&昔の記憶でやってみました。
/* マスター作成 */ import org.codehaus.groovy.scriptom.*; import org.codehaus.groovy.scriptom.tlb.office.excel.*; import groovy.sql.Sql /** * データ追加処理 **/ def addTable = { def params -> driverClassName = "com.ibm.as400.access.AS400JDBCDriver" username = "USHIDA" password = "*******" url = "jdbc:as400://192.168.*.***/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操作 **/ Scriptom.inApartment { String fileName = new File(".").getAbsoluteFile().getParent() + "/社員一覧.xls" //Excel excel = new ActiveXObject("Excel.Application") //ブック workbook = excel.workbooks.open(new File(fileName).canonicalPath) //ワークシート def worksheet = workbook.sheets(1) //最大行・最大列 def rowMax = worksheet.UsedRange.Rows.Count def colMax = worksheet.UsedRange.Columns.Count println "最大:${rowMax}行/最大:${colMax}列" // セルの操作 def params = [:] worksheet.cells.with{ for(row in 4..rowMax){ params.code = cells(row,2).value as int params.kana = cells(row,3).value params.name = cells(row,4).value params.hireDate = new java.text.SimpleDateFormat("yyyyMMdd").format(cells(row,5).value) addTable(params) } } workbook.close excel.quit() }
- 元のExcel
一度出来れば、これからは簡単に出来そう。ユーザーさんからのチョイトな作業に役立ちそうです。