当程序打开 excel 时,interop excel 在工作表上给出空值

interop excel gives null on worksheet when excel is opened by program

当 excel 被程序(自动化)打开时,我无法访问 excel Worksheet。它给出 System.NullReferenceException

保存 excel 时工作正常,我手动打开它并 运行 下面的代码。

Excel.Application excel;
            excel = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") as Excel.Application;
            Excel.Workbook WB;
            Excel.Worksheet xlWorksheet;

            xlWorksheet = (Excel.Worksheet)excel.ActiveSheet;  //error line

            Excel.Range xlRange = xlWorksheet.UsedRange;
            ...
            ...

请注意,即使 excel 被程序打开,这一行 excel = System.Runtime.InteropServices.Marshal.. 也能通过调试。错误出现在上面代码

中标记为 "error line" 的行

当 excel 被程序

打开时,如何使上面的代码工作

编辑:为了更清楚起见,下面是场景

我遇到了问题,因为 excel 过程是 运行 来自以前的会话。当上面的代码试图连接到由另一个程序打开的 excel sheet 时,它给了我 null 异常。 解决方法是在上述代码 运行 之前结束所有 excel 进程。 不知何故,当我 运行 手动保存代码 excel 时它没有抱怨。我不确定为什么会出现这种行为,但目前已解决。