如何防止通过 Visual C++ 自动化 Excel 时超时?
How to prevent Time out when Automate Excel via Visual C++?
我正在使用 Visual C++ 2008 来自动化 Excel 2010,如下所示:
CApplication ExcelApp;
if (ExcelApp.CreateDispatch(_T("Excel.Application"), NULL))
{
CWorkbooks oWorkbooks;
CWorkbook oWorkbook;
// Add a workbook
oWorkbooks = ExcelApp.get_Workbooks();
oWorkbook = oWorkbooks.Add(vOpt);
// Wait for user input
// ::Sleep(1000 * 60 * 15);
oWorkbook.Activate();
// Save workbook
oWorkbook.SaveAs(COleVariant(strExcelFile), COleVariant((long)xlOpenXMLWorkbook), COleVariant(_T("")), COleVariant(_T("")),
vFalse, vOpt, (long)xlNoChange, vOpt, vOpt, vOpt, vOpt, vOpt);
ExcelApp.Quit();
}
在自动化过程中,我需要等待用户输入并将其保存到Excel工作簿中。如果等待时间较长,例如 15 分钟,则即将执行的 SaveAs 方法将失败,错误代码为 0x800a03ec,在 https://social.msdn.microsoft.com/Forums/Lync/en-US/92ad0462-5bfe-4353-b9e2-d13e93e712c8/cannot-save-workbook-via-automation?forum=exceldev 中有描述。
在我的代码注释中,我使用 Sleep 函数来模拟 15 分钟的等待时间,这将导致错误。
在这种情况下,有没有办法让自动化保持活动状态,以防止自动化连接超时?
为了方便重现错误,我在VS2008中做了如下两个测试项目:
EADLL,这是一个MFC DLL。它包含一个 TestExcel 函数,该函数将自动执行 Excel 2010 并调用 SaveAs 将 Excel 文件保存为 .xlsx 文件格式。如果让休眠时间为15分钟,则会出现异常。
EAApp,这是一个基于Dialog的应用程序来调用DLL。
我在 Windows 7 Ultimate(with SP1) 64 位版本上重新测试了 EADLL & EAApp 并确认当睡眠 15 分钟时会发生错误。
EADLL 和 EAApp 均已压缩,可从以下位置下载:
https://www.dropbox.com/s/6btgglnt9znadwp/EA.zip?dl=0
谢谢
出现问题是因为安装在本地计算机上的Excel没有激活。激活后问题解决
我正在使用 Visual C++ 2008 来自动化 Excel 2010,如下所示:
CApplication ExcelApp;
if (ExcelApp.CreateDispatch(_T("Excel.Application"), NULL))
{
CWorkbooks oWorkbooks;
CWorkbook oWorkbook;
// Add a workbook
oWorkbooks = ExcelApp.get_Workbooks();
oWorkbook = oWorkbooks.Add(vOpt);
// Wait for user input
// ::Sleep(1000 * 60 * 15);
oWorkbook.Activate();
// Save workbook
oWorkbook.SaveAs(COleVariant(strExcelFile), COleVariant((long)xlOpenXMLWorkbook), COleVariant(_T("")), COleVariant(_T("")),
vFalse, vOpt, (long)xlNoChange, vOpt, vOpt, vOpt, vOpt, vOpt);
ExcelApp.Quit();
}
在自动化过程中,我需要等待用户输入并将其保存到Excel工作簿中。如果等待时间较长,例如 15 分钟,则即将执行的 SaveAs 方法将失败,错误代码为 0x800a03ec,在 https://social.msdn.microsoft.com/Forums/Lync/en-US/92ad0462-5bfe-4353-b9e2-d13e93e712c8/cannot-save-workbook-via-automation?forum=exceldev 中有描述。
在我的代码注释中,我使用 Sleep 函数来模拟 15 分钟的等待时间,这将导致错误。
在这种情况下,有没有办法让自动化保持活动状态,以防止自动化连接超时?
为了方便重现错误,我在VS2008中做了如下两个测试项目:
EADLL,这是一个MFC DLL。它包含一个 TestExcel 函数,该函数将自动执行 Excel 2010 并调用 SaveAs 将 Excel 文件保存为 .xlsx 文件格式。如果让休眠时间为15分钟,则会出现异常。
EAApp,这是一个基于Dialog的应用程序来调用DLL。
我在 Windows 7 Ultimate(with SP1) 64 位版本上重新测试了 EADLL & EAApp 并确认当睡眠 15 分钟时会发生错误。
EADLL 和 EAApp 均已压缩,可从以下位置下载:
https://www.dropbox.com/s/6btgglnt9znadwp/EA.zip?dl=0
谢谢
出现问题是因为安装在本地计算机上的Excel没有激活。激活后问题解决