vbs-实现模拟打开excel和强制计算和保存
原因是excel里面包含了许多的计算公式,而且是跨sheet的,java代码不好处理
\' Excel Batch Processor - Double-Click Compatible
\' 使用脚本所在目录作为目标路径
targetFolder = Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName, \"\\\") - 1)
\' Check if running with WScript (GUI mode)
If InStr(1, WScript.FullName, \"wscript.exe\", vbTextCompare) > 0 Then
\' Relaunch with CScript
Set WshShell = CreateObject(\"WScript.Shell\")
WshShell.Run \"cmd /c cscript.exe //nologo \"\"\" & WScript.ScriptFullName & \"\"\" & pause\", 1, True
WScript.Quit
End If
Set fso = CreateObject(\"Scripting.FileSystemObject\")
\' Verify target folder exists
If Not fso.FolderExists(targetFolder) Then
WScript.Echo \"ERROR: Target folder not found: \" & targetFolder
WScript.Quit 1
End If
Set folder = fso.GetFolder(targetFolder)
\' --- START PROCESSING ---
startTime = Timer
WScript.Echo \"=================================================================\"
WScript.Echo \" STARTING EXCEL FILE PROCESSING\"
WScript.Echo \" Directory: \" & targetFolder
WScript.Echo \" Start Time: \" & Now()
WScript.Echo \"=================================================================\"
On Error Resume Next
Set excel = CreateObject(\"Excel.Application\")
If Err.Number 0 Then
WScript.Echo \"ERROR: Excel not installed or access denied\"
WScript.Quit 2
End If
excel.Visible = False
excel.DisplayAlerts = False
excel.AskToUpdateLinks = False
excel.EnableEvents = False
excel.Calculation = -4105 \' xlCalculationAutomatic
fileCount = 0
successCount = 0
errorCount = 0
skippedCount = 0 \' 新增跳过计数
\' 获取Excel文件列表
Dim excelFiles
Set excelFiles = CreateObject(\"System.Collections.ArrayList\")
For Each file In folder.Files
ext = LCase(fso.GetExtensionName(file.Path))
If ext = \"xlsx\" Or ext = \"xlsm\" Or ext = \"xls\" Then
fileCount = fileCount + 1
excelFiles.Add file.Path
End If
Next
If fileCount = 0 Then
WScript.Echo \"No Excel files found in target directory\"
excel.Quit
WScript.Quit 0
End If
WScript.Echo \"Found \" & fileCount & \" Excel files to process\"
WScript.Echo String(60, \"-\")
\' Process files
current = 0
For Each filePath In excelFiles
current = current + 1
fileName = fso.GetFileName(filePath)
WScript.Echo \"PROCESSING [\" & current & \"/\" & fileCount & \"]: \" & fileName
\' 跳过已打开的Excel文件
On Error Resume Next
Set workbook = excel.Workbooks.Open(filePath, 0, False)
If Err.Number = 0 Then
\' 跳过只读文件
If workbook.ReadOnly Then
WScript.Echo \" SKIPPED: File is read-only\"
workbook.Close False
skippedCount = skippedCount + 1
Else
workbook.ForceFullCalculation = True
excel.CalculateFullRebuild
workbook.Save
workbook.Close False
successCount = successCount + 1
WScript.Echo \" STATUS: SUCCESS\"
End If
Set workbook = Nothing
Else
errorMsg = \" ERROR: \" & Err.Description
Select Case Err.Number
Case -2146827284: errorMsg = \" ERROR: File not found or access denied\"
Case 1004: errorMsg = \" ERROR: File is already open or locked\"
End Select
WScript.Echo errorMsg
errorCount = errorCount + 1
Err.Clear
End If
WScript.Echo String(60, \"-\")
Next
\' Cleanup
excel.Quit
Set excel = Nothing
\' --- END PROCESSING ---
endTime = Timer
processingTime = Round(endTime - startTime, 2)
WScript.Echo \"=================================================================\"
WScript.Echo \" PROCESSING COMPLETE\"
WScript.Echo \" Finish Time: \" & Now()
WScript.Echo \" Processing Duration: \" & processingTime & \" seconds\"
WScript.Echo \"-----------------------------------------------------------------\"
WScript.Echo \" Excel files found: \" & fileCount
WScript.Echo \" Successfully processed: \" & successCount
WScript.Echo \" Failed: \" & errorCount
WScript.Echo \" Skipped (read-only): \" & skippedCount
WScript.Echo \" Success Rate: \" & Round((successCount/(fileCount - skippedCount))*100, 2) & \"%\" & _
\" (excluding skipped)\"
WScript.Echo \"=================================================================\"
\' ===== 新增:创建成功标记文件 =====
successFilePath = targetFolder & \"\\success.txt\"
Set successFile = fso.CreateTextFile(successFilePath, True) \' True表示覆盖现有文件
successFile.WriteLine \"Excel Batch Processing Completed Successfully\"
successFile.WriteLine \"Completion Time: \" & Now()
successFile.WriteLine \"Total Files Processed: \" & fileCount
successFile.WriteLine \"Success Count: \" & successCount
successFile.WriteLine \"Error Count: \" & errorCount
successFile.WriteLine \"Skipped Count: \" & skippedCount
successFile.Close
Set successFile = Nothing
WScript.Echo \"Success marker file created: \" & successFilePath
WScript.Echo \"Processing complete. Excel processes have exited.\"
WScript.Echo \"Files are unlocked and ready for other applications.\"
WScript.Echo \"Press any key to close this window...\"
Set fso = Nothing
WScript.StdIn.Read(1)