You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:30:46