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