从System.Runtime.InteropServices.COMException
运行以下方法时,我收到main()
如果系统上打开了excel,我想得到true
,以后再访问工作表。我确保打开了excel并存在sheet1
,但是我得到了false
和上面的错误。
using Excel = Microsoft.Office.Interop.Excel;
public static bool IsExcelOpened(string sheet1)
{
bool isOpened = true;
Excel.Application exApp;
exApp = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");
try
{
Excel.Worksheet xlWorksheet;
xlWorksheet = (Excel.Worksheet)exApp.Workbooks.get_Item(sheet1);
}
catch (Exception)
{
isOpened = false;
}
return isOpened;
}
编辑:当我以管理员身份运行VS2019时,我收到了更多关于错误的信息
Operation unavailable (Exception from HRESULT: 0x800401E3 (MK_E_UNAVAILABLE))
答案 0 :(得分:1)
我认为您的问题是在different context的Excel中运行Visual Studio。
我尝试对您的代码进行稍微修改,并且以管理员身份运行Visual Studio NOT (与excel所使用的用户相同)时,它的工作正常。
可能值得检查您是否也在使用正确版本的interop dll。
public bool IsExcelOpened()
{
bool isOpened = false;
try
{
Excel.Application exApp;
Excel.Worksheet xlWorksheet;
exApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") as Excel.Application;
if(exApp != null)
{
xlWorksheet = (Excel.Worksheet)exApp.ActiveSheet;
isOpened = true;
}
}
catch { }
return isOpened;
}