问题描述
今天碰到一件怪事,无论如何想不通。程序如下:OptionExplicitOnImportsSystem.IO'引入文本操作ImportsMicrosoft.Office.InteropImportsSystem.Text.RegularExpressionsPublicClassForm1DimxlAppExcelFileAsNewExcel.ApplicationDimwdAppWordFileAsNewWord.ApplicationDimpathSAsString'EXCELPATHDimpathTAsString'TXTpathDimpathWAsString'wordpathDimpathDAsString'DictonarypathDimdicAsString()()DimArr1ODimArr2Oendclass
一、要不要引用“microsoftexcel14.0objectlibrary’”呢?A如果我不勾选,会提示未定义类型“‘excel.application’”错误B如果我勾选,正常通过二、要不要引用“microsoftword14.0objectlibrary’”呢?A如果我不勾选,正常通过B如果我勾选,会提示“‘“Application”在命名空间“Microsoft.Office.Interop.Word”中不明确。“错误”三、最终的解决方案是勾选“microsoftexcel14.0objectlibrary’”,而不勾选“‘“microsoftword14.0objectlibrary’”’”,但这不符合逻辑呀。四、确定真图,
解决方案
本帖最后由 lengyeshuang 于 2016-05-24 00:54:56 编辑
解决方案二:
“未定义”明显是缺少引用,所以添加引用后就正确了,而“不明确”在两个命名空间内都存在一个同名的类,需要你指定类型,所以你去掉一个引用就相当于选择了另一个。这两者完全不同,没有任何好奇怪的
解决方案三:
引用1楼xdashewan的回复:
“未定义”明显是缺少引用,所以添加引用后就正确了,而“不明确”在两个命名空间内都存在一个同名的类,需要你指定类型,所以你去掉一个引用就相当于选择了另一个。这两者完全不同,没有任何好奇怪的
我懂了,对于word的问题就是我已经在另一个命名空间中引用过“word”类了?那接下来的问题就是:1、除了office,还会有哪个命名空间内存在"word"这个类呢?2、如果找到那个命名空间,我想把它前面的勾去掉。
解决方案四:
引用2楼lengyeshuang的回复:
那接下来的问题就是:1、除了office,还会有哪个命名空间内存在"word"这个类呢?2、如果找到那个命名空间,我想把它前面的勾去掉。
在Microsoft.Office.Interop下面已经有了,你可以双击看一下里面声明
解决方案五:
引用3楼xdashewan的回复:
Quote: 引用2楼lengyeshuang的回复:
那接下来的问题就是:1、除了office,还会有哪个命名空间内存在"word"这个类呢?2、如果找到那个命名空间,我想把它前面的勾去掉。在Microsoft.Office.Interop下面已经有了,你可以双击看一下里面声明
更糊涂了,查看了一下,发现word,excel都有呀,那为什么还要勾选“‘excel.application’”?
解决方案六:
引用4楼lengyeshuang的回复:
Quote: 引用3楼xdashewan的回复:
Quote: 引用2楼lengyeshuang的回复:
那接下来的问题就是:1、除了office,还会有哪个命名空间内存在"word"这个类呢?2、如果找到那个命名空间,我想把它前面的勾去掉。在Microsoft.Office.Interop下面已经有了,你可以双击看一下里面声明
更糊涂了,查看了一下,发现word,excel都有呀,那为什么还要勾选“‘excel.application’”?
那里面有Application吗?如果没有自然要添加相应的dll
解决方案七:
引用4楼lengyeshuang的回复:
更糊涂了,查看了一下,发现word,excel都有呀,那为什么还要勾选“‘excel.application’”?
所以引用的时候一般都用到word就引用Microsoft.Office.Interop.Word,用到excel就引用Microsoft.Office.Interop.Excel