私が構築している Java アプリケーションの一部として、2 つの Excel ファイルを開き、ファイル A からファイル B にデータをコピーし、ファイル B を新しい名前で保存してから、両方のファイルを閉じる必要があります。現在、このタスクを実行する VBScript があります。Java は次の方法で呼び出します。
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("cscript " + pathtovbscript);
このスクリプトが Java プログラムを介して呼び出されると、問題なく実行され、エラーはスローされないように見えますが、結果の Excel ファイルを検索するためにターゲット ディレクトリに移動すると、そこにはありません。プログラムの実行中にタスクマネージャーを見ていると表示されるので、Excelを開いていることがわかります。
最後に、コマンド ラインから手動でスクリプトを呼び出すと、すべて正常に動作し、新しいファイルが作成されます。
これを引き起こしている可能性のあるものについて何か考えはありますか?
以下の VBScript:
Dim destworkbook
Dim excel
Dim currsave
Dim sourceexcellist
sourcepath = path1
destpath = path2
sourcetab = tabname1
desttab = tabname2
savepath = savepathname
desttablist = Split(desttab, ",")
sourcelist = Split(sourcepath, ",")
sourcetablist = Split(sourcetab, ",")
destlist = Split(destpath, ",")
savelist = Split(savepath, ",")
Wscript.Echo "Number of Sources: " + Cstr(UBound(sourcelist)+1)
If UBound(desttablist) = UBound(sourcelist) And UBound(sourcelist) = UBound(sourcetablist) And UBound(sourcetablist) = UBound(destlist) Then
WScript.Echo "Arguments Equal"
Else
Wscript.Echo "Error: Arguments Invalid"
Wscript.Echo "Dest Tabs: " + Cstr(UBound(desttablist))
Wscript.Echo "Source Tabs: " + Cstr(UBound(sourcetablist))
Wscript.Echo "Sources: " + Cstr(UBound(sourcelist))
Wscript.Echo "Destinations: " + Cstr(UBound(destlist))
Wscript.Quit
End If
i=0
j=0
Set excel = CreateObject("Excel.Application")
For Each source in sourcelist
Wscript.Echo "Opening Excel"
If i>0 Then
lastdest = destlist(i-1)
Wscript.Echo "Last Destination file is " + lastdest
End If
Wscript.Echo "Creating Excel Object"
Wscript.Echo "Opening Workbook Located at " + sourcelist(i)
Set sourceWorkbook = excel.Application.Workbooks.Open(sourcelist(i))
excel.Application.DisplayAlerts = False
excel.Application.Visible = False
Wscript.Echo "Opening Workbook Located at " + destlist(i)
If lastdest <> destlist(i) Then
Wscript.Echo "Last Template Not Equal To Current Template"
destWorkbook.close
If Err.Number <> 0 Then
Wscript.Echo "No Active Excel"
Err.Clear
End If
Set destWorkbook = excel.Application.Workbooks.Open(destlist(i))
currsave = savelist(j)
Wscript.Echo "Current Save Path is " + currsave
j=j+1
End If
Wscript.Echo "Copying Range in " + sourcetablist(i)
sourceWorkbook.Sheets(sourcetablist(i)).UsedRange.Copy
Wscript.Echo "Activating Destination Range in " +desttablist(i)
destWorkbook.Sheets(desttablist(i)).Activate
destWorkbook.Sheets(desttablist(i)).Range("A1").Select
Wscript.Echo "Pasting data"
destWorkbook.Sheets(desttablist(i)).Paste
sourceWorkbook.close
Wscript.Echo "Saving results at " + currsave
destWorkbook.SaveAs Filename:=currsave
Wscript.Echo "Quitting Source File at " + sourcelist(i)
excel.Application.Workbooks.Activate(sourcelist(i))
sourceWorkbook.Activate
excel.Application.Quit
sourceexcellist(i) = sourceExcel
i=i+1
Next
For Each w in excel.Application.Workbooks
Wscript.Echo "Closing Workbook"
w.close
Next
Wscript.Echo "Closing Excel"
excel.Application.quit