com 异常 excel InteropServices.COMException - C#
com exception excel InteropServices.COMException - c#
当 运行 从 main()
使用以下方法时,我收到 System.Runtime.InteropServices.COMException
我想获取 true
,如果 excel 在系统上打开,稍后访问 sheet。我确保 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))
我认为您的问题是 Visual Studio 运行 different context 到 Excel。
我尝试了你的代码的一个稍微修改的版本,当 运行 Visual Studio NOT 作为管理员(与 [=23 相同的用户) =] 是用).
打开的
可能值得检查一下您是否也使用了正确版本的互操作 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;
}
当 运行 从 main()
System.Runtime.InteropServices.COMException
我想获取 true
,如果 excel 在系统上打开,稍后访问 sheet。我确保 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))
我认为您的问题是 Visual Studio 运行 different context 到 Excel。
我尝试了你的代码的一个稍微修改的版本,当 运行 Visual Studio NOT 作为管理员(与 [=23 相同的用户) =] 是用).
打开的可能值得检查一下您是否也使用了正确版本的互操作 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;
}