GroovyでExcelファイルの印刷フッター設定を変更する

2019-01-31Groovy

前回に引き続き、今回もエクセルねたです。

すべての単体テスト仕様書に対して、以下の箇所を変更してほしいという要望がありました。

  • 表紙タイトル
  • 表紙シート以外の印刷フッター設定

もちろん手作業ではしんどいので、 Groovy でやってしまうことに。
VBAで組んだらいいのかもしれませんが、やはり使い慣れた言語のほうがループやif文といったちょっとしたことや、ライブラリも頭に入っているためスピーティに作れます。

ちょっとした作業を自動化する際には馬鹿にできないですよね。

「06.単体テスト」というフォルダ以下のすべてのファイルを対象にしています。
(対象のファイルは先頭が"PT_"ではじまり、最後が".xls"となっているものに絞っています。これが単体テスト仕様書。)

setAllExcel.groovy

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 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 filelist = []
    new File(/C:tempproject06.単体試験/).eachFileRecurse { file ->
        if (file.name =~ /^PT_.+?.xls$/)
            filelist << file
    }

    filelist.sort { it.name }.each { file ->
        println file.name
        def workbook = xlApp.workbooks.open(file.path)

        workbook.sheets.findAll { it.name != "表紙" }.each { sheet ->
            sheet.range("BY" + 1).value = execDateList.max()
            sheet.PageSetup.CenterFooter = "&P-1 / &N-1 "
        }

        try {
            workbook.names("名前定義1").delete()
            workbook.names("名前定義2").delete()
        } catch (Exception e) {
            println "例外発生"
        }

        //workbook.SaveAs(file.path + ".xls")
        //workbook.SaveAs(file.path)
        workbook.save()
        workbook.close()
    }

    xlApp.visible = true
}

2019-01-31Groovy