2008/08/12

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

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

すべての単体テスト仕様書の

  • 表紙タイトル
  • 表紙シート以外の印刷フッター設定
  • を変更してほしいという要望がありました。

    もちろん手作業ではしんどいので、 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:\temp\project\06.単体試験/).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
    }

    0 件のコメント:

    コメントを投稿