ScriptomでExcelに画像を貼付ける
面倒臭いけどやってみるかとググってみたら、2年前にすでにゲンゾウ(id:genzouw)さんが試しておりました。実にスバラシイ!!そしてありがとうございますっ。
→ http://genzou-postit.blogspot.com/2008/08/groovyexcel.html
ありがたくパクらせて頂きましたが、ついでにちょっとイジりました。
import org.codehaus.groovy.scriptom.* import org.codehaus.groovy.scriptom.tlb.office.MsoAutomationSecurity import org.codehaus.groovy.scriptom.tlb.office.MsoFeatureInstall import org.codehaus.groovy.scriptom.tlb.office.excel.* Scriptom.inApartment { def dir = new File("c:/temp") def xlApp = new ActiveXObject('Excel.Application') xlApp.with { visible = false displayAlerts = false automationSecurity = MsoAutomationSecurity.msoAutomationSecurityForceDisable alertBeforeOverwriting = false askToUpdateLinks = false; featureInstall = MsoFeatureInstall.msoFeatureInstallNone } def workbook = xlApp.workbooks.Add() def anchor = workbook.sheets(1) def idx = 1 dir.eachFileMatch(~/.*\.png$/) { image -> def worksheet = workbook.Worksheets.Add(anchor) def worksheet.name = "新しいシート_${idx++}" def picture = worksheet.pictures.insert(image.path) } workbook.SaveAs(dir.path + "/result.xls") xlApp.visible = true }
えーと、ポイントは「シートごとに画像を貼付ける/シートの並び順が昇順」あたりですかね。
ホントは、Excel側でWorksheets.Add()
のAfter
パラメタとか使ってみたかったんだけど、Scriptomから名前付きパラメタってどうやって指定すんのかわからんかった。
#単純に第一引数にnull渡して、第二引数を指定するだけかな?(あとで試してみよっと)
あと、貼付ける先のExcelは新規ファイルよかは、なんか元になるファイルをベースに展開してったほうが、それっぽいんだろうな。画像を挿入するシートやセルに何かしらのマークを仕込んどいてさ。...なーんてルールはそれぞれだろうから、ウチんとこはウチんとこに見合ったルールを考えよう。
さらにおまけすると、ここら辺組込んでみても面白いかもだ。
→ groovy-sample/DnD.groovy at master · masanobuimai/groovy-sample · GitHub