LinqPad7中C#调用GetObject获取已打开Excel失败求助
在LinQPad 7中无法获取已打开Excel实例的解决方法
问题场景
在常规C# .NET项目中,可通过以下代码连接已打开的Excel应用程序:
public Microsoft.Office.Interop.Excel.Application ExcelApplication; ExcelApplication = (Microsoft.Office.Interop.Excel.Application)Microsoft.VisualBasic.Interaction.GetObject(Class: "Excel.Application");
需引用Microsoft.Office.Interop.Excel和Microsoft.VisualBasic程序集。但在LinQPad 7中执行相同代码时,ExcelApplication始终返回null(已确认Excel处于打开状态),且已正确添加引用、导入命名空间,无报错但无法连接。LinQPad自带的Excel示例仅演示创建新应用程序,需排查问题原因。
解决方法(基于Joe Albahari的评论)
- 匹配运行位数:若Excel为32位版本,而LinQPad 7默认以64位运行,跨位数的COM对象无法被
GetObject识别。通过LinQPad菜单栏Edit > Preferences > Advanced,勾选“Run queries as 32-bit process”,重启后重试。 - 添加正确的COM引用:不要仅依赖NuGet的Interop程序集,通过
Add Connection > More > COM找到并添加对应版本的Microsoft Excel xx.x Object Library,确保COM交互的兼容性。 - 替换为
Marshal.GetActiveObject:使用.NET原生的COM交互方法替代VisualBasic的GetObject,代码如下:
using System.Runtime.InteropServices; var excelApp = (Microsoft.Office.Interop.Excel.Application)Marshal.GetActiveObject("Excel.Application");
内容的提问来源于stack exchange,提问作者user19618751
相关产品推荐
相关产品推荐

