我有一个将Excel文件转换为制表符分隔文本文件的VBScript:
format = -4158
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)
oExcel.ActiveProtectedViewWindow.Edit
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
在Qt中,我使用wscript运行此代码,并将信号QProcess :: errorOccurred连接到lambda:
QObject::connect(&wscript, &QProcess::errorOccurred, [=](QProcess::ProcessError error)
{
qDebug() << "Error has occured";
});
在我的VB脚本中,删除了受保护的视图。但是,我修改了脚本,以便它不会禁用受保护的视图。这导致我的脚本无法打开受保护视图中的Excel文件,这导致错误,指示无法打开Excel文件。但是,永远不会发送errorOccured信号。为什么会这样?
答案 0 :(得分:3)
仅在Process::errorOccured
本身出现问题或正在运行的进程崩溃时才会发出QProcess
信号(请参阅原因here)。
如果您希望VB脚本以某种方式通知您的应用程序错误,那么您的脚本必须使用非零退出代码,可以通过QProcess::exitCode
读取,或写入其标准错误可以在QProcess::readyReadStandardError
信号上捕获和读取的流。