一、手动修改注册表解决:
1、打开注册表编辑器
方法:开始 -> 运行 -> 输入regedit -> 确定
2、找到注册表子项
HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security
3、在右侧空白处点击鼠标右键,选择“新建 -> DWORD值(D)”,输入“ExtensionHardening”点击确定。
4、用鼠标右键点击ExtensionHardening,然后单击“修改(M)”,在数值数据中填写“0”即可确定。
5、关闭注册表编辑器,再次打开xls文件看看是不是提示是不是不见了?
小知识:ExtensionHardening设置的值的数据设置:
* 0:不检查文件扩展名和文件类型并绕过该函数的警告消息。
* 1:检查文件扩展名和文件类型。如果它们不匹配会显示警告消息。
* 2:检查文件扩展名和文件类型。如果它们不匹配不要打开该文件。
二、程序解决第一步:
枚举注册表找到excel安装路径:
HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Excel.exe\\Path
第二步:
拼接excel路径并读取文件版本信息
第三步:
写注册表,参考“手动修改注册表解决”
代码示例:
//str = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\Excel.exe\\Path" 注册表的值;long nSize = lstrlen(str.c_str());if(str[nSize - 1] == '\\'){str += _T("EXCEL.EXE");}else{str += _T("\\EXCEL.EXE");}bool bFind = false;long nVersion = 0;//excel的版本号VS_FIXEDFILEINFO *pVsInfo;unsigned int iFileInfoSize = sizeof(VS_FIXEDFILEINFO);int iVerInfoSize = GetFileVersionInfoSize(str.c_str(), NULL);if(iVerInfoSize != 0){char *pBuf = NULL;while(!pBuf){try{pBuf = new char[iVerInfoSize];}catch(...){}}if(GetFileVersionInfo(str.c_str(), 0, iVerInfoSize, pBuf)){if(VerQueryValue(pBuf, _T("\\"), (void **)&pVsInfo, &iFileInfoSize)){bFind = true;nVersion = HIWORD(pVsInfo->dwFileVersionMS);}}delete[] pBuf;pBuf = NULL;}if(bFind){TCHAR tcData[2048] = {0};_stprintf(tcData, _T("Software\\Microsoft\\Office\\%d.0\\Excel\\Security\\ExtensionHardening"), nVersion);//写注册表}
windows C++ 解决Office打开文件提示“您尝试打开的文件xxx.xls的格式与文件扩展名指定的格式不一致”