GroovyでExcelファイルに画像ファイルを貼り付ける

2019-01-31Groovy

仕事で、テストのエビデンスとしてとったjpgファイルをすべてエクセルに貼り付けて提出してほしいと言われた。

僕はindex.htmlにjpgをimgタグで挟み込んで
エビデンスとして残しておこうと思ったんだけれど、
それではまずいとのこと。
(どこのSI企業でも、Excelによるテスト結果の保存が好きですね)

そこで作ったのが以下のスクリプト。
windows installer を使用してGroovyをインストールすると、 scriptom もインストールされます。
scriptom を使用することでgroovyからcomを操作することが可能になります。

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.office2003.excel.*

Scriptom.inApartment {

    def dir = new File(System.properties["user.home"] + "/デスクトップ")

    // おまじない
    def xlApp = new ActiveXObject('Excel.Application')
    xlApp.visible = false
    xlApp.displayAlerts = false
    xlApp.automationSecurity = MsoAutomationSecurity.msoAutomationSecurityForceDisable
    xlApp.alertBeforeOverwriting = false
    xlApp.askToUpdateLinks = false;
    xlApp.featureInstall = MsoFeatureInstall.msoFeatureInstallNone

    // 新規ワークブック作成
    def workbook = xlApp.workbooks.Add()
    def worksheet = workbook.sheets(1)

    worksheet.name = "新しいシート"
    dir.listFiles().findAll{ it.name.endsWith(".jpg") }.sort().each{ image ->
        def picture = worksheet.pictures.insert(image.path)
        /*
         * pictureオブジェクトに対して、top、left、width、heightを
         * 指定することが可能。
         */
    }

    workbook.SaveAs(dir.path + "/result.xls")

    xlApp.visible = true
}

2019-01-31Groovy