相关疑难解决方法(0)

如何从PowerShell连接到现有的Excel实例?

所有通过PowerShell自动化Excel的示例都以此行开头:

PS> $Excel = New-Object -Com Excel.Application
Run Code Online (Sandbox Code Playgroud)

这似乎是处理一个新的Excel实例,例如运行$Excel.Visiable = $true将显示一个空的空白Excel窗口,而不是切换到现有的工作簿.

如果已经运行了Excel实例,有没有办法连接到它?

excel powershell automation

5
推荐指数
2
解决办法
5490
查看次数

GetActiveObject()与GetObject() - MK_E_UNAVAILABLE错误

所有:

我在将一些VBA代码转换为C#时遇到了一些问题.

我们有一个第三方应用程序,它充当本地COM服务器.

在VBA代码中,我们使用GetObject()来获取对现有对象的引用

例如

Set appHandle = GetObject("", ProgId)
Run Code Online (Sandbox Code Playgroud)

这很好用.

我在c#代码中添加了对第三方应用程序的引用,并使用 Marshal.GetActiveObject()来尝试获取对正在运行的实例的引用.

例如

var appModel = (IAppCoModel)Marshal.GetActiveObject(ProgId);
Run Code Online (Sandbox Code Playgroud)

但我一直收到MK_E_UNAVAILABLE错误.

在C#代码中创建新对象可以正常工作

例如

var appModel = new AppCoModel()
Run Code Online (Sandbox Code Playgroud)

这将启动第三方应用程序,并允许我与它进行通信.它只是抓取对正在运行的实例失败的引用.

我试过的

不同的安全上下文
VS在管理模式下运行,第三方应用程序不是.我尝试从命令行运行我们的c#app(非管理员).仍然失败.

检查ROT内容
(由Marshal.GetActiveObject()建议在C#中抛出MK_E_UNAVAILABLE异常)
第三方应用程序不会出现在其中.不知道足够的COM以确保它需要.

检查所有注册表条目
看起来不错(据我所见),它们足以创建第三方应用程序和实例以及VBA找到它.有什么特别的,我应该在这里查看?

任何人们可以提出的建议将不胜感激.

c# com vba interop

3
推荐指数
1
解决办法
4831
查看次数

标签 统计

automation ×1

c# ×1

com ×1

excel ×1

interop ×1

powershell ×1

vba ×1