2011-05-12 183 views
1

我想从C#写数据到Excel,但在调试时我有一个例外:导出到Excel从C#

Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.Excel.Range'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{00020846-0000-0000-C000-000000000046}' failed due to the following error: Интерфейс не поддерживается (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).

代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Excel = Microsoft.Office.Interop.Excel; 
namespace ConsoleApplication3 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     Excel.Application excelapp; 
     Excel.Window excelWindow; 
     Excel.Workbooks excelappworkbooks; 
     Excel.Workbook excelappworkbook; 
     Excel.Sheets excelsheets; 
     Excel.Worksheet excelworksheet; 
     Excel.Range excelcells; 
     excelapp = new Excel.Application(); 
     excelapp.Visible = true; 

     excelappworkbooks = excelapp.Workbooks; 

     excelappworkbook = excelapp.Workbooks.Open(@"C:\Documents and Settings\дима\Мои документы\Visual Studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\bin\Debug\a.xls", 
          Type.Missing, Type.Missing, Type.Missing, 
     "WWWWW", "WWWWW", Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
      Type.Missing, Type.Missing); 

     excelsheets = excelappworkbook.Worksheets; 

     excelworksheet = (Excel.Worksheet)excelsheets.get_Item(1); 
     excelcells = excelworksheet.get_Range("A1", "A1"); 

     excelcells.Value2 = 10.5; 
     } 
    } 
    } 
} 
+2

你能否提一下你在哪一行得到异常。 – 2011-05-12 10:07:40

+0

excelcells = excelworksheet.get_Range(“A1”,“A1”); – dima 2011-05-12 11:46:02

+0

当我打电话给WorkSheet.UsedRange – 2011-05-12 13:42:13

回答

0

这是不是真的回答问题直接,但我看到很多人都在通过COM接口控制Excel。

我从TMS Software得到了一个名为FlexCel的库,它允许您完全在代码中创建或操作Excel工作表,甚至不需要在机器上安装Excel。

它有很多其他有用的特性,以及(写PDF文件,从Excel模板做复杂的报表,等等,等等)

我要指出,我与该公司比其他没有连接,是一个满意的用户。

+0

时,我也面临完全相同的问题。还有免费的excel阅读/书写库:http://npoi.codeplex.com/或http://epplus.codeplex.com/ – 2011-05-13 11:34:20

0

你可以请尝试以下并让我知道。下面的代码应该如果您正在使用C#4.0中运行C#3.0

excelcells = excelworksheet.get_Range("A1", Type.Missing); 

,请使用以下

excelcells = excelworksheet.get_Range("A1"); 

而且总是写代码用try/catch块。

+0

不需要它无论如何使用“a1”或索引如“1,1” – dima 2011-05-14 18:00:42

0

试试这个: 使用添加删除程序>转到标签更改或删除程序 转到Microsoft Office专业版2003点击链接“单击此处获取支持信息”。使用修复按钮。

这对我有效。

1

看起来像一个类型库冲突。 也许你已经安装了多个版本。 请检查你必须LIB你想要的类型的引用

9.0 Excel 2000中

10.0 Excel 2002中

11.0 Excel 2003中

12.0 Excel 2007中

14.0 Excel 2010中

参考变更后,清理解决方案并做一个完整的重新编译。