1

我正在尝试从 c# 将数据写入 Excel,但在调试时出现异常:

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

4 回答 4

1

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

9.0 Excel 2000

10.0 Excel 2002

11.0 Excel 2003

12.0 Excel 2007

14.0 Excel 2010

参考更改后,清理解决方案并进行完整的重新编译。

于 2011-05-28T00:47:02.373 回答
0

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

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

它还具有许多其他有用的功能(编写 PDF 文件、从 Excel 模板生成复杂报告等)

我应该指出,除了作为一个满意的用户之外,我与公司没有任何关系。

于 2011-05-12T18:27:11.297 回答
0

您能否尝试以下方法并告诉我。以下代码应在 C# 3.0 中工作

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

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

excelcells = excelworksheet.get_Range("A1");

还要始终使用 try/catch 块编写代码。

于 2011-05-13T06:56:09.460 回答
0

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

这对我有用。

于 2011-05-13T11:13:40.617 回答