com异常excel InteropServices.COMException-C#

时间:2019-06-28 14:52:45

标签: c# excel com comexception

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))

1 个答案:

答案 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;
        }