ushidayの日記

主に「IBMi」のメモに・・・

GroovyでExcelの操作その2

ExcelのシートをAS/400DB2へ上げる」の続きです。
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()
	
}

  • AS/400DB2を5250で確認すると...

一度出来れば、これからは簡単に出来そう。ユーザーさんからのチョイトな作業に役立ちそうです。