Как создать таблицу Excel с помощью надстройки Word?

Я пытаюсь создать таблицу Excel, а затем вставить ее в документ Word с помощью надстройки C# Word. Я создал новую надстройку Word 2010 и ссылался на Microsoft.Office.Interop.Excel, В качестве быстрого теста я пытаюсь создать новый Excel.Worksheet и заполните его несколькими значениями. Затем я вставляю его в документ Word, используя InsertDatabase метод:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
      Excel.Worksheet testWrkSht = new Excel.Worksheet();
      for(int i = 1; i < 5; i++)
      {
           testWrkSht.Range["A" + i.ToString()].Value = i ^ (i + 1);
      }
      Word.Document curDoc = this.Application.ActiveDocument;
      curDoc.Paragraphs[1].Range.InsertDatabase(testWrkSht);

}

Моя проблема в том, что когда я пытаюсь выполнить это, я получаю следующую ошибку:

Исключение типа "System.InvalidCastException" произошло в MyCustomAddIn.dll, но не было обработано в коде пользователя

Дополнительная информация: Невозможно привести объект COM типа "Microsoft.Office.Interop.Excel.WorksheetClass" к типу интерфейса "Microsoft.Office.Interop.Excel._Worksheet". Эта операция завершилась неудачно, поскольку произошел сбой вызова QueryInterface в компоненте COM для интерфейса с IID '{000208D8-0000-0000-C000-000000000046}' из-за следующей ошибки: Интерфейс неизвестен. (Исключение из HRESULT: 0x800706B5).

Как создать таблицу электронных таблиц Excel и вставить ее в Word Doc?

1 ответ

Решение

Поскольку вы создаете надстройку Word, вам нужно открыть еще один экземпляр Excel, а затем создать рабочую таблицу Excel. Вот быстрый пример:

    Excel.Application xlApp = new Excel.Application();

    if (xlApp == null)
    {
        Console.WriteLine("Excel could not be started.  Check that your office installation and project references are correct.");
        return;
    }
    xlApp.Visible = true;

    Excel.Workbook wb = xlApp.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
    Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets[1];

    if (ws == null)
    {
        Console.WriteLine("Worksheet could not be created.  Check that you office installation and project references are correct.");
    }

    for(int i = 1; i < 5; i++)
    {
        ws.Range["A" + i.ToString()].Value = i * (i + 1);
    }

    wb.SaveAs(Filename: "C:\\temp\\test.xlsx");

Это также предполагает, что вы добавили соответствующий оператор using: using Excel = Microsoft.Office.Interop.Excel; а также добавил ссылку на Excel Interop.

Другие вопросы по тегам