无法强制转换类型为';的COM对象;Microsoft.Office.Interop.Excel.Workshee

本文关键字:对象 COM Microsoft Office Workshee Excel Interop 转换 类型 | 更新日期: 2023-09-27 18:30:07

我正试图用C#从一堆聚合数据中创建并保存一个新的excel文档。现在,我只是想让基本的工作,比如编辑表格单元格等。下面我只是想设置一个单元格的内容:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Excel;
namespace DebugReport
{
    class MonumentDebugReport
    {
        static void Main(string[] args)
        {    
            Worksheet spreadsheet = new Worksheet();
            spreadsheet.Cells[0, 0] = "stuff";
       }
    }
}

返回:

无法将类型为"Microsoft.Office.Interop.Excel.WorksheetClass"的COM对象强制转换为接口类型"Microsoft.Office[Interop.Eexcel_Worksheet"。此操作失败,因为对IID为"{000208D8-0000-0000-C000-000000000046}"的接口的COM组件的QueryInterface调用由于以下错误而失败:不支持此类接口(HRESULT中的异常:0x80004002(E_NOINTERFACE))。

在我设置单元格的行上。对我来说,这看起来和我看到的大多数示例/教程完全一样,而且我在C#文档中找不到任何东西表明这不起作用。

无法强制转换类型为';的COM对象;Microsoft.Office.Interop.Excel.Workshee

就像Hans已经说过的那样,您需要先创建一个Excel应用程序,然后向其中添加工作簿,然后添加工作表(或尝试访问现有的Sheets[1]

给出using Microsoft.Office.Interop.Excel和别名

using Excel = Microsoft.Office.Interop.Excel

然后

Excel.Application xlApp = new Excel.Application();
xlApp.Visible = true;
Excel.Workbook xlWb = xlApp.Workbooks.Add() as Excel.Workbook;
Excel.Worksheet xlSheet = xlWb.Sheets[1] as Excel.Worksheet;
Excel.Range range = xlSheet.get_Range("A1");
range.Value = "hello world!";

然后看看如何正确清理Excel互操作对象