Как создать таблицу 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.