当程序打开 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 被程序
打开时,如何使上面的代码工作
编辑:为了更清楚起见,下面是场景
- 单击 AUT 中的按钮,打开 excel sheet
- 当 excel 打开时,sheet 在屏幕上可见
- 我需要以编程方式访问此 sheet 并验证一些信息
我遇到了问题,因为 excel 过程是 运行 来自以前的会话。当上面的代码试图连接到由另一个程序打开的 excel sheet 时,它给了我 null
异常。
解决方法是在上述代码 运行 之前结束所有 excel 进程。
不知何故,当我 运行 手动保存代码 excel 时它没有抱怨。我不确定为什么会出现这种行为,但目前已解决。
当 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 sheet
- 当 excel 打开时,sheet 在屏幕上可见
- 我需要以编程方式访问此 sheet 并验证一些信息
我遇到了问题,因为 excel 过程是 运行 来自以前的会话。当上面的代码试图连接到由另一个程序打开的 excel sheet 时,它给了我 null
异常。
解决方法是在上述代码 运行 之前结束所有 excel 进程。
不知何故,当我 运行 手动保存代码 excel 时它没有抱怨。我不确定为什么会出现这种行为,但目前已解决。