如何在C#中获取Excel.Application实例?
我试图让Excel应用程序在我的代码用这种方法:如何在C#中获取Excel.Application实例?
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\...
请尝试以下代码:
//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);
}
我已经有一个Excel实例打开了。 d喜欢获取该实例而不是打开一个新实例。 – KentuckyJack92
是你的“xlApp”公共还是全球?如果它是全球性的或公开的,你可以使用 – imsome1
也许我提出了一个令人困惑的问题。重点是我需要以编程方式更新必须在Excel中打开而不更改其路径的文件。为此,我想在Excel中关闭并保存并重新打开它。这就是为什么我想要一种方法来识别托管我感兴趣的文件的Excel实例(也许在各种不同的Excel实例中)。 – KentuckyJack92
您是否使用_only_互操作或者您也使用ClosedXML吧?你有一行'使用Excel = Microsoft.Office.Interop.Excel;'我问,因为你的代码对我来说工作得很好。 – LocEngineer
我只使用Interop。在我的代码中,我添加了:'使用Excel = Microsoft.Office.Interop.Excel;' – KentuckyJack92
您的Excel版本是否与Interop版本匹配Excel 2010为14.0还是2016为16.0?你使用什么版本? – LocEngineer