2009-08-07 66 views
3

我开发了一个将数据导入Microsoft Excel的应用程序。使用VS2005 + .NET 2.0和Microsoft Office 2007.NET Office interop使用版本独立的办公室

AM是安装在我的机器(办公室12)上。

的编译的应用程序工作正常,如果我在我的机器上运行它,但当我将应用程序部署到其他机器说,那些使用较低版本(Office 2000的),我得到的错误:

无法加载文件或大会的Microsoft.Office.Interop.Excel,版本12.0.0.0

我怎么会那么让我的应用程序正确执行,无论安装在计算机上的Office(Excel)中的?

谢谢。

一些更新: 我把引用的两个DLL,即Microsoft.Office.Interop.Excel.dll(版本12.0.0.0)和Office.dll(版本12.0.0.0)在我的bin文件夹。我已经将此引用的属性设置为Copy Local = True,并且当我编译我的应用程序时,这些DLL被复制到debug/release文件夹中。

现在,当我尝试运行应用程序时,我已经下了错误的: “无法加载文件或程序的Microsoft.Office.Interop.Excel,版本12.0.0.0”

但另一个错误来到这是: System.AccessViolationException:试图读取或写入受保护的内存。这通常表明其他内存已损坏。 (对象文件名,对象文件格式,对象密码,对象WriteResPassword,对象ReadOnlyRecommended,对象CreateBackup,XlSaveAsAccessMode AccessMode,对象ConflictResolution,对象AddToMru,对象TextCodepage,对象TextVisualLayout,对象本地)

所以,实际上,我怎么创造条件,能够在数据表中的数据导出安装到Excel不管Office版本的应用程序?

谢谢。

回答

2

MS Office Wrapper for .NET - 它是独立于Office的版本包装(testeod微软Office 97 - 2007年的作品)。

+0

我试过用你的Office Wrapper,它在Office 2007中工作正常。我在Office 2000中没有测试过。 我遇到的一个问题是应用程序创建过程似乎驻留在内存中。即使我调用了MSExcel.Application.CreateApplication.Quit(),仍然会收到一条消息,提示您“您是否想要将更改保存到Book1?”当我关闭/注销我的机器时。 任何进一步的建议高度赞赏。谢谢。 – Batuta 2009-08-14 01:03:17

+0

设置属性“Application.Interactive = false”。那么应该禁止所有的用户输入。 有关物业的更多信息:http://msdn.microsoft.com/en-us/library/bb177670.aspx – TcKs 2009-08-14 08:54:19

0

这是因为它特别寻找该组件的版本12。

在您的csproj中,找到引用文件夹中对该程序集的引用。进入该引用的属性,并将特定版本设置为False。

+0

我已经设置了特定的版本= False,但仍然无法在Office版本较低的机器上运行应用程序。 – Batuta 2009-08-07 01:50:27

0

你将有较少的问题 - 但你仍然可能有问题 - 如果你建立对Excel 2003中,而不是Excel 2007中

是.NET的Excel兼容库,你可以用你的应用程序部署,而无需担心无论您的用户是否拥有特定版本的Excel(即使他们没有任何版本的Excel,它也能正常工作)。

您可以使用C#和VB源代码here查看示例,并下载免费试用版here

声明:我自己的SpreadsheetGear LLC

1

在过去,我发现如果你确定所有的Office引用(即不是系统引用)被设置为复制本地,它将工作。

我一般用Office 2003 PIA编译(你可以从微软的网站上得到),输出已经与Office 07一起工作了。我很久没试过Office 2000或XP,所以不确定输出是否可以工作。