3

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

我正在使用 VS2005 + .NET 2.0,并且我的机器(Office 12)上安装了 Microsoft Office 2007。

如果我在我的机器上运行编译的应用程序,它可以正常工作,但是当我将应用程序部署到其他机器时说那些使用较低版本(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 会复制到调试/发布文件夹中。

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

但是出现了另一个错误: System.AccessViolationException: Attempted to read or write protected memory。这通常表明其他内存已损坏。在 Microsoft.Office.Interop.Excel.WorkbookClass.SaveAs(对象文件名、对象 FileFormat、对象密码、对象 WriteResPassword、对象 ReadOnlyRecommended、对象 CreateBackup、XlSaveAsAccessMode AccessMode、对象 ConflictResolution、对象 AddToMru、对象 TextCodepage、对象 TextVisualLayout、对象本地)

那么,无论安装的 Office 版本如何,我如何实际创建一个能够将数据表数据导出到 Excel 的应用程序?

谢谢。

4

4 回答 4

2

查看适用于 .NET 的 MS Office Wrapper - 它是独立于 Office 版本的包装器(testeod MS Office 97 - 2007 and works)。

于 2009-08-07T07:25:29.717 回答
1

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

我通常使用 Office 2003 PIA 进行编译(您可以从 Microsoft 网站的某处获得),并且输出与 Office 07 一起使用。我很久没有尝试过 Office 2000 或 XP,所以不确定输出是否有效。

于 2009-08-07T13:32:03.453 回答
0

如果您针对 Excel 2003 而不是 Excel 2007 构建,您将遇到更少的问题 - 但您仍然可能遇到问题。

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

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

免责声明:我拥有 SpreadsheetGear LLC

于 2009-08-07T04:35:57.983 回答
0

这是因为它专门寻找该程序集的第 12 版。

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

于 2009-08-07T01:02:47.923 回答