|
12
|
| Andy_Vulhop · 技术社区 · 16 年前 |
|
|
1
23
不能以编程方式命令使用哪个版本的Excel。PIA只规定了您要开发的接口或对象模型。但实际运行的Excel版本由注册表控制。 但是,当涉及到运行PIA时,您将实际运行系统上安装的最高级别PIA。因此,如果您是针对Excel2003 PIA开发的,但是客户机有Excel2007和Excel2007 PIA,那么您的代码将针对Excel2007 PIA运行——并且应该运行良好,因为Excel2007 PIA是向后兼容的。也就是说,每个编号较高的PIA版本(和Excel对象模型)都向后兼容根据旧的PIA和旧的Excel对象模型编译的命令。请注意,如果客户机上同时有Excel2007和Excel2003 PIA,则无论运行的是哪个版本的Excel,都会加载更高版本的PIA—因此,如果两个PIA都可用,Excel2007 PIA将运行。 [编辑:一个警告是,使用vb.net或c 4.0时,Excel2007 PIA应100%向后兼容。如果使用C 3.0或更低版本,当从C 3.0或更低版本调用时,实际上需要可选参数这一事实将在针对更高版本PIA或对象模型运行时在某些代码中创建一个中断。不过,这是相对罕见的,而且随着C 4.0的出现,理论上这个问题应该会消失。] 好的,所以您对PIA没有很大的控制权,因为您开发的PIA实际上并不能控制哪个PIA将在客户机上运行。 你也不能很好地控制Excel的哪个版本被启动。例如,当您通过以下方式创建新的Excel实例时:
加载的Excel应用程序根据注册表中设置的当前版本进行设置。当前版本保存在:
在您的示例中,“curver”键的默认值为“excel.application.11”,而不是“excel.application.12”。单独更改这一点可能会有帮助,但我更愿意进行修复,而不是确保正确更正所有注册表设置。(我不可能知道所有的设置应该是什么。)好的,我刚找到另一个:你还需要更改:
保存值“excel.application.12”。但我强烈建议您改为运行修复程序。我不知道还有哪些设置需要更改,所以手动更改这些设置有点冒险。 此外,还应找到以下键:
因为这些是您安装的Excel版本。 (见 here 以便进一步讨论。)
是的,这是100%正确的。您可以尝试在Excel2007上运行修复,这是最简单的操作。如果这不起作用,那么我将卸载这两个,然后重新安装这两个。我先卸载Excel2003,然后卸载2007(与安装顺序相反),然后安装Excel2003,然后安装Excel2007,以便以正确的顺序安装这两个版本。
但请记住,通过这样做,Excel2007将在调用时默认运行。
实际推荐做法是 不 在开发人员的计算机上运行两个版本的Excel。有关更多信息,请参阅:
我以前在同一台开发机器上有多个版本的Excel,我个人认为其缺点并没有这些文章听起来那么复杂。一般来说,Excel2007 PIA与Excel2003 PIA向后兼容,一切正常。但有一次我陷入了和你类似的注册表混乱,决定“做正确的事情”。我同时卸载了这两个,然后只重新安装了Excel2007。 从那里,我安装了免费的虚拟PC(虚拟机软件实际上更好一点,但不是免费的),然后在单独的虚拟机上安装了我较低版本的Excel2003、2002、2000和97。这肯定是一些工作要建立,但一旦你这样做,一切都是100%干净。 也就是说,我可能不想 发展 相对于虚拟机上较低版本的Excel,在虚拟机中使用Visual Studio太难了。因此,这些虚拟机只适用于测试部署,以确保您的系统能够针对各种客户机配置工作。有道理? 希望这有帮助! 迈克 |
|
Vinoth · 无法加载文件或程序集的Microsoft。办公室互操作。Excel,版本=14.0.0.0,区域性=中性,PublicKeyToken=71e9bce111e9429c’[重复] 9 年前 |
|
|
Timmo · Excel Interop-阻止图表使用行和列调整大小 9 年前 |