当程序打开excel时,interop excel在工作表上提供null

时间:2019-07-01 17:09:48

标签: c# excel office-interop excel-interop

通过程序(自动)打开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..也会通过调试。错误出现在上面代码中标记为“错误行”的行

当程序打开excel时如何使上述代码工作

编辑:以下是更清晰的场景

  • 单击AUT中的按钮,这将打开excel工作表
  • 打开excel时,工作表在屏幕上可见
  • 我需要以编程方式访问此工作表并验证一些信息

1 个答案:

答案 0 :(得分:0)

我遇到问题是因为excel进程是从以前的会话运行的。当以上代码尝试连接到由另一个程序打开的excel工作表时,它给了null一个异常。  解决的办法是在运行上述代码之前结束所有excel进程。 不知何故,当我在手动保存的excel上运行代码时,它没有抱怨。我不确定为什么会发生这种情况,但现在可以解决。