VBScript Excel到CSV转换器非常慢,受保护的视图更慢

我发现一个VBScript将Excel文件转换为CSV文件,并将其修改为我的需要。 我正在处理的文件通常在受保护的视图中,所以我有以下代码:

format = 6 Set objFSO = CreateObject("Scripting.FileSystemObject") src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0)) dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1)) Dim oExcel Set oExcel = CreateObject("Excel.Application") oExcel.DisplayAlerts = False oExcel.ProtectedViewWindows.Open(src_file) If oExcel.ProtectedViewWindows.Count > 0 Then oExcel.ActiveProtectedViewWindow.Edit End If Dim oBook Set oBook = oExcel.Workbooks.Open(src_file) oBook.Worksheets(5).Activate oBook.SaveAs dest_file, format oBook.Close False oExcel.DisplayAlerts = True oExcel.Quit 

此脚本从Excel文件中删除受保护的视图,并将当前选定的工作表保存为csv文件。 如果我第一次运行这个,需要大约25-27秒将4个受保护的视图excel文件转换成csv文件。 当我第二次运行它时,excel文件不再处于保护视图中,我得到了类似的结果。 我很好奇,看看如果我删除了对受保护视图的检查会发生什么,所以我做了以下操作:

 format = 6 Set objFSO = CreateObject("Scripting.FileSystemObject") src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0)) dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1)) Dim oExcel Set oExcel = CreateObject("Excel.Application") oExcel.DisplayAlerts = False Dim oBook Set oBook = oExcel.Workbooks.Open(src_file) oBook.Worksheets(5).Activate oBook.SaveAs dest_file, format oExcel.AutomationSecurity = lSecurity oBook.Close False oExcel.DisplayAlerts = True oExcel.Quit 

现在,我不能用这个脚本打开受保护的excel文件,但是如果excel文件不受保护,它将比以前的脚本更快地转换它们。 现在不在保护视图中的4个excel文件平均需要14秒才能转换成csv文件。 我跑了这么多次,以确保每次都得到相同的结果。

为什么检查受保护的视图会导致脚本花费更长的时间? 有什么办法可以让它跑得更快吗? 另外,有没有其他办法通过命令行转换Excel文件为CSV? 我也试过Powershell,它比VBScript更快! 但我不能让它为受保护的视图文件工作。 我应该提到,我正在Qt 5.6中通过QProcess来运行这些脚本。 谢谢你的帮助

在第一个你打开文件2次! 一个用于oExcel.ProtectedViewsWindow ,一个用于oExcel.Workbooks

尝试像这样(未testing):

 format = 6 Set objFSO = CreateObject("Scripting.FileSystemObject") src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0)) dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1)) Dim oExcel Set oExcel = CreateObject("Excel.Application") oExcel.DisplayAlerts = False oExcel.ProtectedViewWindows.Open(src_file) Dim oBook If oExcel.ProtectedViewWindows.Count > 0 Then Set oBook = oExcel.ActiveProtectedViewWindow.Edit Else Set oBook = oExcel.ActiveWorkbook End If oBook.Worksheets(5).Activate oBook.SaveAs dest_file, format oBook.Close False oExcel.DisplayAlerts = True oExcel.Quit