.NET Office互操作使用版本独立的办公室

我开发了一个将数据导入Microsoft Excel的应用程序。

我的机器上安装了VS2005 + .NET 2.0和Microsoft Office 2007(Office 12)。

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

无法加载文件或程序集Microsoft.Office.Interop.Excel,版本12.0.0.0

那么我将如何使我的应用程序正确执行而不pipe机器上安装的Office(Excel)如何?

谢谢。

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

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

但另一个错误出现了:System.AccessViolationException:试图读取或写入受保护的内存。 这通常表示其他内存已损坏。 Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs(Object Filename,Object FileFormat,Object Password,Object WriteResPassword,Object ReadOnlyRecommended,Object CreateBackup,XlSaveAsAccessMode AccessMode,Object ConflictResolution,Object AddToMru,Object TextCodepage,Object TextVisualLayout,Object Local)

那么,如何创build一个应用程序,无论安装的Office版本如何,都可以将数据表格数据导出到Excel中?

谢谢。

看看MS Office Wrapper for .NET – 它是独立于Office版本的包装(testeod MS Office 97 – 2007)。

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

我通常编译与Office 2003 PIA(你可以从微软的网站得到的),输出已经与Office 07的工作。我还没有尝试Office 2000或XP很长一段时间,所以不知道如果输出将工作。

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

在你的csproj中,find引用文件夹中对该程序集的引用。 进入该参考的属性,并将特定版本为False。

如果您使用Excel 2003而不是Excel 2007构build,则问题可能会减less – 但仍然可能会出现问题。

SpreadsheetGear for .NET是一个适用于.NET的Excel兼容库,您可以将其与应用程序一起部署,而无需担心用户是否拥有特定版本的Excel(即使它们没有任何版本的Excel,也可以运行)。

您可以在这里看到带有C#和VB源代码的示例,并在此处下载免费试用版。

免责声明:我自己的SpreadsheetGear LLC