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