Excel提供了对外的API调用,可以用来实例化一个excel的instance,具体的调用方法是:
#define EXCEL_APPLICATION_NAME _T("Excel.Application")
……
Excel::_ApplicationPtr xlAppPtr; //指向excel的instance的指针
Excel::_WorkbookPtr bookPtr; //指向一个workbook的指针
RESULT hr = S_OK;
try
{
hr = xlAppPtr.CreateInstance(EXCEL_APPLICATION_NAME); //实例化一个excel的instance
xlAppPtr->Visible = false;
xlAppPtr->UserControl = true;
xlAppPtr->DisplayAlerts = false;
bookPtr = xlAppPtr->Workbooks->Open(name.c_str()); //打开某个excel文件
……
}
其中如果Excel.Application这个组件在注册表中没有正确注册的话,在打开的时候会找不到具体的执行文件,报一个"REGDB_E_CLASSNOTREG Class not registered"错误。
这时候可以去regedit里面查询Excel.Application这个节点的配置是否正确
regedit中,节点的路径:Computer\HKEY_CLASSES_ROOT\WOW6432Node\CLSID
打开这个节点的配置之后,找到其中的“LocalServer32”, 可以发现配置如下:
由图可以发现,“LocalServer32”的值为"C:\Program Files\Microsoft Office\Root\Office16\EXCEL111.EXE" /automation
但是去C:\Program Files\Microsoft Office\Root\Office16路径下没有找到EXCEL111.EXE,只有EXCEL.EXE,所以把“LocalServer32”的值改为"C:\Program Files\Microsoft Office\Root\Office16\EXCEL.EXE" /automation ,保存之后生效,至此问题解决