2012-06-05 86 views
4

奇怪的错误对于当前的代码:上Excel工作簿输入

String currentPath = Directory.GetCurrentDirectory(); 

     OpenFileDialog op = new OpenFileDialog(); 
     op.InitialDirectory = currentPath; 
     if (op.ShowDialog() == DialogResult.OK) 
      currentPath = op.FileName; 
     else 
     { 
      toolStripStatusLabel1.Text = "Failed to Load Workbook"; 
      toolStripStatusLabel1.Visible = true; 
     } 

     Workbook wb = new Workbook(excel.Workbooks.Open(currentPath)); 

我收到错误:

System.Runtime.InteropServices.COMException了未处理 消息=检索COM类工厂组分与由于以下错误,CLSID {00020819-0000-0000-C000-000000000046}失败:80040154类未注册(异常来自HRESULT:0x80040154(REGDB_E_CLASSNOTREG))。 源= mscorlib程序 错误码= -2147221164

我要的是一个预定义的工作簿的工作表添加到

回答

12

我想在你的代码中,Workbook的全名是Microsoft.Office.Interop.Excel.Workbook,而那个excel是Microsoft.Office.Interop.Excel.Application的一个实例。

如果是这种情况,您的代码无法工作,因为Workbook是一个接口,而接口没有构造函数。你要问Excel应用程序创建工作簿的你,和你的情况,你必须简单地写:

Workbook wb = excel.Workbooks.Open(currentPath); 

以类似的方式,如果你想创建一个新的空白工作簿中,你应该写:

Workbook wb = excel.Workbooks.Add(System.Reflection.Missing.Value); 
+0

令人惊讶的是,这为我工作!我花了几个小时,每个人都试图说,这是由于64位/ 32位构建模式,我已经设置了它应有的方式,但仍然存在问题,但这是有效的。谢谢! –

2

我不知道你的错误,但我已经做了类似这样的:

_app = new Excel.Application(); 
Excel.Workbook wb = _app.Workbooks.Open(currentPath); 
1

右击你的解决方案,改变平台的x86 重建您的解决方案...... 祝你好运!