问题描述
我自己电脑上安装的是office2003,所以在vb.net的项目添加的引用是“Microsoftoffice11.0objectlibrary”。但到了别人那里,他用的是office2002,这样程序就会运行出错。提示“System.IO.FileNotFoundException:Couldnotloadfileorassembly'Microsoft.Office.Interop.Excel,Version=11.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c'oroneofitsdependencies.Thesystemcannotfindthefilespecified.”请问,在开发中,如何解决这个office版本不同的问题?谢谢!
解决方案
解决方案二:
把Microsoft.Office.Interop.Excel.dll複製過去,放到安裝目錄下。
解决方案三:
我也遇到过,我的解决方法是:将你使用到的DLL放到安装包中,安装时复制到安装目录下
解决方案四:
答案是用后期绑定:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Reflection;namespaceExcelOpt{///<summary>///Excel后期绑定的操作类///</summary>publicclassApplication{objectm_ExcelApp;publicApplication(){TypeobjExcelType=Type.GetTypeFromProgID("Excel.Application");if(objExcelType==null){thrownewException("未发现Excel程序");}m_ExcelApp=Activator.CreateInstance(objExcelType);if(m_ExcelApp==null){thrownewException("启用Excel程序失败!");}}publicvoidOpen(stringExcelFileName){//检查文件是否存在if(!System.IO.File.Exists(ExcelFileName))thrownewException("要打开的文件"+ExcelFileName+"不存在!");//打开文件if(m_ExcelApp!=null){object[]parameters=newobject[1]{ExcelFileName};}}publicvoidSaveAs(stringExcelFileName){}publicboolVisible{get{objectobjVisible=m_ExcelApp.GetType().InvokeMember("Visible",BindingFlags.GetProperty,null,m_ExcelApp,null);if(objVisibleisBoolean)return(bool)objVisible;elsethrownewException("调用方法失败!");}set{object[]Parameters=newobject[1]{value};m_ExcelApp.GetType().InvokeMember("Visible",BindingFlags.SetProperty,null,m_ExcelApp,Parameters);}}publicWorkbooksWorkbooks{get{objectworkbooks=m_ExcelApp.GetType().InvokeMember("Workbooks",BindingFlags.GetProperty,null,m_ExcelApp,null);if(workbooks==null)thrownewException("查询工作簿时失败!");elsereturnnewWorkbooks(workbooks);}}}}namespaceExcelOpt{publicclassWorkbooks{privateobjectm_Workbooks;privatestringm_ExcelFileName;publicWorkbooks(objectworkbooks){m_Workbooks=workbooks;}publicvoidOpen(stringExcelFileName){try{m_ExcelFileName=ExcelFileName;object[]Parameters=newobject[1]{ExcelFileName};m_Workbooks.GetType().InvokeMember("Open",BindingFlags.InvokeMethod,null,m_Workbooks,Parameters);}catch(Exceptionerr){throwerr;}}publicWorkbookthis[intindex]{get{object[]Parameters=newobject[1]{index};objectworkbook=m_Workbooks.GetType().InvokeMember("Item",BindingFlags.GetProperty,null,m_Workbooks,Parameters);if(workbook==null)thrownewException("获取工作薄时出现错误!");elsereturnnewWorkbook(workbook);}}}}namespaceExcelOpt{publicclassWorkbook{privateobjectm_Workbook;publicWorkbook(objectworkbook){m_Workbook=workbook;}publicWorksheetsWorksheets{get{objectworksheets=m_Workbook.GetType().InvokeMember("Worksheets",System.Reflection.BindingFlags.GetProperty,null,m_Workbook,null);if(worksheets==null)thrownewException("获取工作表集合时失败!");elsereturnnewWorksheets(worksheets);}}publicvoidSaveAs(stringFileName){object[]Parameters=newobject[1]{FileName};m_Workbook.GetType().InvokeMember("SaveAs",System.Reflection.BindingFlags.InvokeMethod,null,m_Workbook,Parameters);}}}namespaceExcelOpt{publicclassWorksheets{privateobjectm_Worksheets;publicWorksheets(objectworksheets){m_Worksheets=worksheets;}publicWorksheetthis[intindex]{get{object[]Parameters=newobject[1]{index};objectworksheet=m_Worksheets.GetType().InvokeMember("Item",System.Reflection.BindingFlags.GetProperty,null,m_Worksheets,Parameters);if(worksheet==null)thrownewException("获取工作表时出现错误!");elsereturnnewWorksheet(worksheet);}}}}namespaceExcelOpt{publicclassWorksheet{privateobjectm_Worksheet;publicWorksheet(objectworksheet){m_Worksheet=worksheet;}publicRangethis[introw,intcol]{get{object[]Parameters=newObject[2]{row,col};objectcells=m_Worksheet.GetType().InvokeMember("Cells",System.Reflection.BindingFlags.GetProperty,null,m_Worksheet,Parameters);if(cells==null)thrownewException("获取单元格失败!");elsereturnnewRange(cells);}}publicRangethis[introw,stringcol]{get{object[]Parameters=newObject[2]{row,col};objectcells=m_Worksheet.GetType().InvokeMember("Cells",System.Reflection.BindingFlags.GetProperty,null,m_Worksheet,Parameters);if(cells==null)thrownewException("获取单元格失败!");elsereturnnewRange(cells);}}}}
解决方案五:
漏了一个:)namespaceExcelOpt{publicclassRange{privateobjectm_Range;publicRange(objectRange){m_Range=Range;}publicobjectValue{get{objectresult=m_Range.GetType().InvokeMember("Value",System.Reflection.BindingFlags.GetProperty,null,m_Range,null);returnresult;}set{object[]Parameters=newObject[1]{value};m_Range.GetType().InvokeMember("Value",System.Reflection.BindingFlags.SetProperty,null,m_Range,Parameters);}}}}
解决方案六:
在参照上的copy选项上选CopyAlways,自动拷贝DLL过去就行了。
解决方案七:
请问limeng0513,这个“参照”在哪可以找到?谢谢!
解决方案八:
点击显示所有文件按钮,可以看到参照设置,是文件夹形式,点击参照的Excel,属性里的拷贝项目选总是拷贝。
解决方案九:
引用1楼rockyvan的回复:
把Microsoft.Office.Interop.Excel.dll複製過去,放到安裝目錄下。
解决方案十:
在解决方案资源管理器中的引用项的属性中,把“复制本地”属性设置成“TRUE”,然后再制作安装包的时候把BIN下的所有都包括进去。