我正在尝试从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;
}
}
}
}
答案 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.单击“单击此处获取支持信息”链接。使用修复按钮。
这对我有用。