|
|
1
7
简单的回答是:您不需要知道加载了哪个PIA版本来解决您的问题。您想知道的是Excel的实际运行版本。尽管正在运行的Excel版本和PIA版本 同样,它们也不一定是,在这种情况下,您关心的是Excel版本,而不是PIA版本。
确定哪个Excel版本正在运行并不困难,但这并不像应该的那么容易,因为
至于PIA与Excel对象模型问题,在开发时程序集引用的主互操作程序集(PIA)与在目标计算机上运行时实际加载的PIA可能有所不同。例如,如果您引用Excel2002PIA,并且目标计算机正在使用Excel2007,则(通常)将加载Excel2007PIA。规则是在运行时加载目标计算机上可用的最高版本的Office PIA。 它变得更加复杂,因为目标机器可能(尽管,绝对不可能)在目标机器上加载Excel 2007,但可用的最高PIA是Excel 2003。在本例中,将加载Excel2007,但您的代码将针对Excel2003PIA工作。相反的情况也可能发生:Excel 2007 PIA可用,但计算机上实际安装的最高版本是Excel 2003——在本例中,将加载Excel 2003,但您的代码将针对Excel 2007 PIA工作。 这些场景在标准设置中不太可能出现。这很可能发生在开发人员的计算机上,其中(1)计算机上同时存在多个Excel版本,或者(2)添加和删除了Excel版本,但没有删除PIA(这本身也不太可能,因为我相信PIA是自动卸载的,但我可能错了)。 有关这方面的更多信息,请参阅Andrew Whitechapel的文章 Why is VS development not supported with multiple versions of Office?
编辑:phsr评论的后续行动:
为了澄清这一点,PIA只指定了涉及的接口,而不是功能。这个
Excel 2003 SaveAs method
具有与
Excel 2007 SaveAs method
,因此PIA在这里没有区别。怎么
要解决您的问题,我建议您采取以下两种可能的行动方案之一: (1) 请尝试我上面给出的代码,以确定正在运行的Excel版本。如果你这样做,并相应地调整你的代码,它将工作,我保证。如果失败了,展示你的代码,我相信我们可以让它工作。
上述操作的结果是一个名为“MyWorkbook.xls”或“MyWorkbook.xlsx”的工作簿,具体取决于运行的Excel版本。简而言之,让Excel为您完成这项工作,这样您就不必担心了。 |
|
|
2
2
|
|
|
3
0
将此代码放在类声明中的某个位置:
在需要时调用此函数:
|