从C#导出到Excel

时间:2011-05-12 10:04:35

标签: c# excel-interop

我正在尝试从c#向Excel写入数据,但在调试时我有一个例外:

  

无法将“System .__ ComObject”类型的COM对象强制转换为接口类型   'Microsoft.Office.Interop.Excel.Range'。   此操作失败,因为   QueryInterface调用COM   与IID接口的组件   '{00020846-0000-0000-C000-000000000046}'   由于以下错误而失败:   Интерфейснеподдерживается(例外情况   来自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;
       }
    }
  }
 }

4 个答案:

答案 0 :(得分:1)

看起来像是类型库冲突。 也许你安装了多个版本。 请检查您是否有对所需类型库的引用

9.0 Excel 2000

10.0 Excel 2002

11.0 Excel 2003

12.0 Excel 2007

14.0 Excel 2010

参考更改后,清理解决方案并完成重新编译。

答案 1 :(得分:0)

这并没有直接回答这个问题,但我看到很多人都在努力通过COM界面控制Excel。

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

它还有许多其他有用的功能(编写PDF文件,从Excel模板执行复杂的报告等)。

我应该指出,除了满意的用户之外,我与公司没有关系。

答案 2 :(得分:0)

请你试试以下内容并告诉我。以下代码应在C#3.0中起作用

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

如果您使用的是C#4.0,请使用以下

excelcells = excelworksheet.get_Range("A1");

也总是用try / catch块写代码。

答案 3 :(得分:0)

试试这个: 使用添加删除程序>转到选项卡更改或删除程序 转到Microsoft Office Professional 2003.单击“单击此处获取支持信息”链接。使用修复按钮。

这对我有用。