com异常excel InteropServices.ComeException-c#

com异常excel InteropServices.ComeException-c#,c#,excel,com,comexception,C#,Excel,Com,Comexception,从main() 如果在系统上打开excel,我希望获得true,然后访问该工作表。我确保excel已打开,并且sheet1在那里,但我得到false和上面的错误 使用Excel=Microsoft.Office.Interop.Excel public static bool IsExcelOpened(string sheet1) { bool isOpened = true; Excel.Application exApp;

main()

如果在系统上打开excel,我希望获得
true
,然后访问该工作表。我确保excel已打开,并且
sheet1
在那里,但我得到
false
和上面的错误

使用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时,我收到了更多关于错误的信息


操作不可用(HRESULT:0x800401E3(MK_E_不可用)中的异常情况)
我认为您的问题是Visual Studio在Excel中运行

我尝试了一个稍微修改过的代码版本,当以管理员身份运行VisualStudio时(与excel打开时使用的是同一个用户),它可以正常工作

可能值得检查您是否也使用了正确版本的互操作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;
        }

这很有效。唯一的问题是,我必须关闭任务管理器中的
excel
进程才能得到false。当我以管理员身份运行excel并运行我的代码版本时,原始错误消失了,但我收到了
“System.InvalidCastException”
。你知道我为什么收到这个吗。Is
xlWorksheet=(Excel.Worksheet)exApp.Workbooks.get_项(sheet1)