Как получить экземпляр Excel.Application в C#?

Я пытаюсь получить приложение Excel в своем коде с помощью этого метода:

Excel.Application xlApp = GetApplication();
if (xlApp == null) xlApp = new Excel.Application();

где

private Excel.Application GetApplication()
    {
        Excel.Application result = null;

        try
        {
            result = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
        }
        catch (System.Runtime.InteropServices.COMException ex)
        {
            //Excel is not open
        }

        return result;
    }

ноSystem.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application")всегда выдает исключение, даже когда приложение Excel открыто.

Исключение: HRESULT: 0x800401E3

Трассировки стека:

   in System.Runtime.InteropServices.Marshal.GetActiveObject(Guid& rclsid, IntPtr reserved, Object& ppunk)
   in System.Runtime.InteropServices.Marshal.GetActiveObject(String progID)
   in RaceToolTests.UnitTest1.GetApplication() in C:\Users\...

1 ответ

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

var path = @"C:\Temp";
var excelFileName = $@"{path}\Sample.xlsx";

var excelApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") as Excel.Application;
// Make the object visible.
excelApp.Visible = true;

// open workbook
Excel.Workbook xlWorkbook = excelApp.Workbooks.Open(excelFileName);

Пожалуйста, попробуйте следующий код:

//import
using Excel = Microsoft.Office.Interop.Excel;

//define
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;

private void openXL()
{

    string fileName = "PATH\\FILE_NAME.xlsx"; ;

    xlApp = new Excel.Application();
    xlWorkBook = xlApp.Workbooks.Open(fileName);
    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
}
Другие вопросы по тегам