Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;找不到Excel COM自动化-工作簿.SaveAs-成员_C++_Excel_Mfc_Com - Fatal编程技术网

C++ C++;找不到Excel COM自动化-工作簿.SaveAs-成员

C++ C++;找不到Excel COM自动化-工作簿.SaveAs-成员,c++,excel,mfc,com,C++,Excel,Mfc,Com,我们最近注意到MFC遗留应用程序中存在问题,无论我们在哪里尝试调用Workbook.SaveAs,在使用比我们的开发机器更旧版本的Office的机器上,此调用都会失败。我想我已经将问题缩小到Excel类型库中的更改,在16.0.4549.1000和16.0.9029.2106之间的某个地方,在SaveAs方法中添加了一个新的可选参数 然而,我很困惑为什么这次的改变会影响我们,而在过去的10多年中,它从未对类型库进行过类似的改变。我们使用以下指令进行导入: // MSO #import "libi

我们最近注意到MFC遗留应用程序中存在问题,无论我们在哪里尝试调用Workbook.SaveAs,在使用比我们的开发机器更旧版本的Office的机器上,此调用都会失败。我想我已经将问题缩小到Excel类型库中的更改,在16.0.4549.1000和16.0.9029.2106之间的某个地方,在SaveAs方法中添加了一个新的可选参数

然而,我很困惑为什么这次的改变会影响我们,而在过去的10多年中,它从未对类型库进行过类似的改变。我们使用以下指令进行导入:

// MSO
#import "libid:2DF8D04C-5BFA-101B-BDE5-00AA0044DE52"  \
        no_dual_interfaces \
        rename("RGB", "OfficeRGB") \
        rename("SearchPath", "OfficeSearchPath")

// VBA
#import "libid:0002E157-0000-0000-C000-000000000046" \
        no_dual_interfaces

// Excel
#import "libid:00020813-0000-0000-C000-000000000046" \
        no_dual_interfaces \
        rename("RGB", "ExcelRGB") \
        rename("DialogBox", "ExcelDialogBox") \
        rename("CopyFile", "ExcelCopyFile") \
        rename("ReplaceText", "ExcelReplaceText")
据我所知,使用“no_dual_interfaces”可以确保生成的包装器方法的所有调用都是通过IDispatch进行的,因此使用了后期绑定,这正好解决了类型库中修改方法的问题。还是我的假设错了

说明问题的示例代码:

// create Excel instance
Excel::_ApplicationPtr excelApp;
excelApp.CreateInstance(_T("Excel.Application"));

// add a new workbook
Excel::WorkbooksPtr workbooks = excelApp->GetWorkbooks();
Excel::_WorkbookPtr workbook = workbooks->Add();
workbook->Activate();

// insert data
// ...

// save the workbook to the temp directory
TCHAR lpTempPath[MAX_PATH];
GetTempPath(MAX_PATH, lpTempPath);
COleVariant filename(CString(lpTempPath) + _T("ExcelAutomation"));
workbook->SaveAs(filename, vtMissing, vtMissing, vtMissing, VARIANT_FALSE, VARIANT_FALSE, Excel::xlNoChange, vtMissing, VARIANT_FALSE);
我们的SaveAs调用只提供支持了多年的参数,所有较新的参数都保留默认值vtmission。无论执行地使用的是哪种Office版本,我们都希望此调用在所描述的场景中工作,但我们是否遗漏了什么


我们就此问题直接联系了Microsoft专业支持,但他们指示我们在StackOverflow上询问…

Microsoft支持服务无法帮助您这一事实是意料之中的。它们不会对任何类型的代码进行故障排除。对于此类问题,您需要签订“卓越支持”合同。

这并不能回答问题。