使用Excel = Microsoft.Office.Interop.Excel编译错误

4

在我的MVC 5应用程序中,我想要使用Microsoft.Office.Interop.Excel库。我使用的是Visual Studio 2013和Office 2013。我添加了一个引用Microsoft.Excel 15.0 Object Library,并在我的类中添加了using Excel = Microsoft.Office.Interop.Excel;。当我点击build时,它不显示任何错误,并告诉我Build Complete,但是当我运行我的应用程序时,我遇到了这个错误

 Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS1748: Cannot find the interop type that matches the embedded interop type 'Microsoft.Office.Interop.Excel.Application'. Are you missing an assembly reference?

Source Error:

[No relevant source lines]

Source File:    Line: 0 

什么可能会是它?

你什么时候运行这个程序? - Daniel A. White
我正在运行 - Bryuk
你为什么要使用Interop而不是像OpenXML这样的东西,甚至更好的是ClosedXML呢?除非你需要处理XLS文件而不是XLSX,否则在我看来,Office Interop不是最佳选择,特别是当你同时使用像MVC5这样酷的东西时! - JMK
3个回答

9
你有适用于MS 2010的程序集,但你已经安装了Office 2013。程序集不支持向前兼容。你必须安装与你的DLL相同版本的Office,或者最好使用类似OpenXml SDK的东西。
然后看起来缺少一些必要的程序集。你需要添加对程序集的引用。
找不到与嵌入式互操作类型匹配的互操作类型。你是否缺少一个程序集引用?这种方法与上一个错误类似,因为如果一个程序集嵌入类型信息而另一个程序集没有,则会出现此错误。在这种情况下,你有一个程序集assembly1,它引用了一个具有嵌入Interop类型设置为true的PIA程序集。然后,Assembly1公开来自PIA程序集的类型,例如作为方法或属性的返回类型。另一个程序集assembly2引用assembly1并利用嵌入式类型。如果assembly2也没有引用PIA程序集,则会出现错误,因此无法定位嵌入式类型信息。要解决此问题,你需要从第二个程序集到PIA程序集添加引用,并将Embed Interop Types属性设置为true。因此,两个程序集都将引用嵌入了类型信息的PIA程序集,并且两个程序集都可以利用嵌入的类型。

http://blogs.msdn.com/b/vbteam/archive/2010/06/11/troubleshooting-errors-when-embedding-type-information-doug-rothaus.aspx


我使用Visual Studio 2013和Office 2013!这是我的描述。 - Bryuk
你使用的 Microsoft.Office.Interop.Excel 版本是哪一个? - Jernej Novak

0

如果我导出一个互操作类型,就会发生这种情况。如果错误是关于 Excel.Application 的,则查找公共类上的公共方法或属性,该方法或属性返回 Application 引用或将 Application 引用作为参数(使互操作类型可见的任何公共内容)。

要么通过将其设置为 privateinternal 来隐藏该类、属性或方法,要么不返回该类型,或者在自己的包装器类中包装互操作类型并返回该类(这是更好的实践方式)。


-1
将参考的dll文件添加到Bin文件夹中可以帮助解决这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接