前回に引き続き、今回もエクセルねたです。
すべての単体テスト仕様書に対して、以下の箇所を変更してほしいという要望がありました。
もちろん手作業ではしんどいので、 Groovy でやってしまうことに。
VBAで組んだらいいのかもしれませんが、やはり使い慣れた言語のほうがループやif文といったちょっとしたことや、ライブラリも頭に入っているためスピーティに作れます。
ちょっとした作業を自動化する際には馬鹿にできないですよね。
「06.単体テスト」というフォルダ以下のすべてのファイルを対象にしています。
(対象のファイルは先頭が"PT_“ではじまり、最後が”.xls"となっているものに絞っています。これが単体テスト仕様書。)
setAllExcel.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| 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
}
|