【发布时间】:2011-01-15 10:01:55
【问题描述】:
环境:
Windows XP 机器
Excel 2007 和 Excel 2003 均已安装(按此顺序,而不是按时间顺序)。
C# 3.5
问题:
当我使用 PIA 进行一些 Office 自动化时,我使用以下代码行:
var excel = new ApplicationClass();
PIA 的版本专门将其称为 Excel 12。
C:\WINDOWS\assembly\GAC\Microsoft.Office.Interop.Excel\12.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll
但是:
excel.Version;//this is 11.0 instead of 12.0
因此,当我尝试打开扩展名为 .xlsx 的文件时,它会警告我文件转换中丢失的功能,并使用 excel 2003 打开它。我很确定它与 2007 年的安装顺序有关 - > 2003,但我无法在我的机器上卸载 2003 b/c 我们的网络服务器上有一些办公自动化,用于使用 excel 2003 的不相关项目。
我查看了 Policy.11.0.Microsoft.Office.Interop.Excel.config 的东西,但它说
<bindingRedirect oldVersion="11.0.0.0" newVersion="12.0.0.0"></bindingRedirect>
所以,我很茫然。为什么我不能告诉 COM Interop 使用哪个版本的 Excel?
【问题讨论】:
-
您可以尝试修复 excel 2007 看看是否可以解决问题吗?
-
这是可能的,但我担心当我必须处理它时,它会提升 2003 年网站代码的 PIA。我想我可以来回弹跳,但我有点担心一旦安装在我们内部用户的机器上会如何工作。
-
它不会改变 PIA。您可以检查 GAC 来确定,但 99.99% 可以肯定您的机器上已经同时安装了 Excel 2003 和 Excel 2007 PIA。因此,PIA 设置不会因修复而改变。但是修复应该修复注册表以使当前版本为 Excel 2007 而不是 Excel 2003。有关更多详细信息,请参阅下面的答案。
标签: c# excel com office-interop pia