700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > windows C++ 解决Office打开文件提示“您尝试打开的文件xxx.xls的格式与文件扩展名

windows C++ 解决Office打开文件提示“您尝试打开的文件xxx.xls的格式与文件扩展名

时间:2020-06-15 19:47:44

相关推荐

windows C++ 解决Office打开文件提示“您尝试打开的文件xxx.xls的格式与文件扩展名

一、手动修改注册表解决:

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的格式与文件扩展名指定的格式不一致”

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。