2010-05-27 46 views
3

我有一个应用程序,它只是在电子表格上完成基本的I/O操作。读入一堆单元格,进行一些排序,然后将输出转储回另一个电子表格。在我的机器上很好用。我安装了Office 2003。使用Excel Interop的C#应用​​程序,在2003年2007年之间轻松切换?

当别人的机器上运行与2007年,它的炸弹,可能是由于不同版本的互操作组件。

我希望有人知道的方式来动态改变,其中组件从取决于Office版本加载哪个/(获取Office版本是很容易从注册表)。我尝试安装2007 PIA,但是当我尝试添加引用时,他们不显示,我不知道在哪里浏览他们(它们在c的arent:\ WINDOWS \组件\;也许是安装没有工作),我该怎么不得不让一台机器与2007年安装的基础上每次我需要做出更新时间

+1

“它的炸弹”并没有帮助我们帮助你。错误消息旨在诊断问题。不要因为你不了解他们而忽略他们,这里肯定会有人。 – 2010-05-27 23:10:11

回答

1

看我的项目MS Office for .NET

它的设置,使用结合后期和dynamicaly加载COM对象在VB.NET writen包装类型管理组件。它与97-2007版本。没有PIA要求。

我保存的对象模型,所以最VSTO样品应只变化不大的工作。

我希望它有帮助。

+0

虽然图书馆可能是好的,但缺乏文档,并只有一些例子和缺失的帮助,如如何打开密码保护的文件...将不得不挖掘源代码找到它 – RohitWagh 2013-01-31 07:08:16

1

它实际上更可能是代表了兼容性问题,而不是PIA的运行时版本。

当它运行时别人的机器上与2007年,它的炸弹, 大概是由于不同 版本的互操作组件。

我知道它可能会“感觉”这种方式,但这种情况不太可能。 Excel 2007 PIA比2003 PIA更广泛,而不是更窄。可能会添加类型,成员和可选参数,但较旧的2003年签名将保持不变。因此,无论是通过2003年PIA还是2007年PIA进行操作,所有旧的2003年呼叫都将以同样的方式工作。当然,这不是100.00%的保证,但它可能在99.8%左右,是我的猜测。

我希望有人知道的方式来 动态改变,其中 组件由根据 的Office版本加载哪个/(越来越办公室 版本是从注册表容易)。

您需要使用反射,例如Assembly.LoadFrom方法。但我真的不认为你需要走这条路,诚实。事实上,为了证明它,您应该将程序集中的引用更改为2007版,编译它,然后运行。我敢打赌,你会得到同样的确切的错误。

但为什么会这样呢?你将如何解决它?

在Excel 2003和Excel 2007对象模型之间的兼容性问题很少,但也有一些。一个示例是Range.Cells.Count属性,该属性返回Int32,其最大值为+4.3 bil。 (约)。但是,随着Excel 2007中引入更大的工作表,电子表格中的单元格数量实际上大约为17.2亿个。因此,如果范围太大(例如,包含整个工作表),Range.Cells.Count将引发异常。相反,你必须调用Range.Cells.CountLarge,因为它返回一个Int64,可以处理更大的结果。

所以它实际上很可能是代表兼容性问题的运行时版本,而不是PIA。因此,您应该隔离引发异常的行,并让我们知道错误消息是什么。然后,也许我们可以帮助...

- 迈克

相关问题