我们最近从 Excel 2007 升级到 Excel 2010,我们发现现有代码开始失败。
异常消息:
Office 检测到此文件存在问题。为帮助保护您的计算机,无法打开此文件。
我们已将其追溯到打开文件的行
excelApp.Workbooks.Open
即使手动打开文件,受保护的视图消息框也会出现。
我们如何使用 C# 来解决这个问题。
我们最近从 Excel 2007 升级到 Excel 2010,我们发现现有代码开始失败。
异常消息:
Office 检测到此文件存在问题。为帮助保护您的计算机,无法打开此文件。
我们已将其追溯到打开文件的行
excelApp.Workbooks.Open
即使手动打开文件,受保护的视图消息框也会出现。
我们如何使用 C# 来解决这个问题。
在您的声明之前查看使用Application.FileValidation 属性 (Excel) 。Open
返回或设置 Excel 在打开文件之前如何验证文件。读/写
未通过验证的文件将在受保护的视图窗口中打开。如果您设置 FileValidation 属性,该设置将在应用程序打开的整个会话期间保持有效。
您可以将其设置为MsoFileValidationMode 枚举中的枚举值之一
msoFileValidationDefault
msoFileValidationSkip
如果你将它设置msoFileValidationSkip
在Open
语句之前,它应该绕过检查。
就像是
excelApp.FileValidation = MsoFileValidationMode.msoFileValidationSkip;
在公开声明之前。
这里游戏迟到了,但这是一个常见的烦恼:您需要定义一个“受信任的位置”。
当您的代码尝试打开电子表格文件并且 “Office 检测到此文件存在问题。为了帮助保护您的计算机,无法打开此文件”时,您并不是唯一遇到此问题的开发人员。是一个非常无用的错误信息。
查看 Daniel Pineault 于 2010 年在 DevHut.net 上发布的可信位置代码:
我会因为在 C# 论坛上发布 VBA 而被拒绝投票,所以我最好不要发布 Daniel 代码的实现(是的,我是 VBA 开发人员,整天都在抨击 VBA 宏,而不是真正的编码员)尖尖的东西和花括号)。如果你真的想看 VBA,在另一篇帖子的回复中:
https://stackoverflow.com/questions/2962728/office-trusted-locations/28115700#28115700
我相信正确的称呼是“分享和享受”。
如果您重复使用该代码,请对原作者 Daniel Pineault 表示感谢:它已在“专家”网站上广泛发布,但未注明出处,这是相当粗鲁的。
我们有同样的问题。我们在 SQL 服务器上的 SSIS 包使用 Excel.Interop 来解析文件。有一天,我们在新服务器上安装了 Office 2010 x64,某些文件开始出现错误:
Office 检测到此文件存在问题。为帮助保护您的计算机,无法打开此文件。
同时,其他服务器运行良好。我们发现 Excel 版本的区别:14.04763.1000 不起作用,但 14.0.7015.1000 对我们有用。最后一个版本号属于 Office 2010 SP2。最终我们下载了SP2并安装了它,结果错误消失了。