通過java呼叫VBS,再用VBS執行Excel中的巨集的例子
(一) 首先需要降低客戶端及伺服器端對於Excel的巨集的安全級別的要求,按照下述的圖示進行操作:
(1)進入巨集的安全級別設定功能
(2) 降低巨集的安全級別
(二) 按照下面程式碼編寫VBS程式碼
Option Explicit Dim objXLApp Dim objXLBook Set objXLApp = WScript.CreateObject("Excel.Application") ‘注意以下的“e/data_test.xls”的位置需要修改為包含巨集的那個excel的實際位置 ‘位置需要設定為絕對路徑 Set objXLBook = objXLApp.Workbooks.Open("e:/data_test.xls" ) ‘doChangeExcel即為excel中的巨集方法的名稱 objXLApp.Run "doChangeExcel" 'objXLBook.Saved = True objXLBook.Save objXLBook.Close Set objXLBook = Nothing objXLApp.Quit Set objXLApp = Nothing WScript.Quit |
(三) 以下是excel中的巨集,僅需要複製到excel的巨集中即可:
'author guoqiang 'date 2007-12-19 Sub doChangeExcel () Dim count count = Sheets.count Debug.Print count For i = 1 To count 'get the assigned sheet Sheets.Item(i).Select 'get the name of the sheet SheetName = ActiveSheet.Name protected = ActiveSheet.ProtectContents 'ptotected = True ActiveSheet.Select '--------------------------------------- 'if it is Trans_Xcpt sheet, then row 5 is autofilter If SheetName = "Trans_Xcpt" Then If protected = True Then ActiveSheet.Select ActiveSheet.Unprotect Rows("5:5").Select Selection.AutoFilter Else Rows("5:5").Select Selection.AutoFilter ActiveSheet.Protect End If '--------------------------------------- 'if it is MTD_IN sheet, then row 4 is autofilter ElseIf SheetName = "MTD_IN" Then If protected = True Then ActiveSheet.Select ActiveSheet.Unprotect Rows("4:4").Select Selection.AutoFilter Else Rows("4:4").Select Selection.AutoFilter ActiveSheet.Protect End If '--------------------------------------- 'if it is Net_Demand sheet, then row 4 is autofilter ElseIf SheetName = "Net_Demand" Then If protected = True Then ActiveSheet.Select ActiveSheet.Unprotect Rows("4:4").Select Selection.AutoFilter Else Rows("4:4").Select Selection.AutoFilter ActiveSheet.Protect End If '--------------------------------------- 'if it is A_Supply sheet, then row 4 is autofilter ElseIf SheetName = "A_Supply" Then If protected = True Then ActiveSheet.Select ActiveSheet.Unprotect Rows("4:4").Select Selection.AutoFilter Else Rows("4:4").Select Selection.AutoFilter ActiveSheet.Protect End If '--------------------------------------- 'if it is Special_Cell sheet, then row 4 is autofilter ElseIf SheetName = "Special_Cell" Then If protected = True Then ActiveSheet.Select ActiveSheet.Unprotect Rows("4:4").Select Selection.AutoFilter Else Rows("4:4").Select Selection.AutoFilter ActiveSheet.Protect End If '--------------------------------------- 'else, only protect or unprotect Else If protected = True Then ActiveSheet.Select ActiveSheet.Unprotect Else ActiveSheet.Select ActiveSheet.Protect End If End If Next i End Sub |
(四) 在java程式碼中進行執行(注意:僅僅支援windows2000以上的系統):
//TODO:其他的程式碼 //以下是執行VBS程式碼 //注意“E:/Temp/vbs.vbs”應該是正確的儲存的VBS程式碼的位置 Process process=Runtime.getRuntime().exec("cmd /c CScript E:/Temp/vbs.vbs"); //等待VBS執行完畢 process.waitFor(); //TODO: 其他的程式碼 |
注意:該巨集會自動判斷是否需要進行protect(巨集程式中假定protect和autofilter是一致的,即同時為true或者false)。