gpt4 book ai didi

c# - 在 VSTO office 插件中创建可调用函数 - COMAddIns.Object 始终为 Nothing

转载 作者:行者123 更新时间:2023-11-30 17:28:53 29 4
gpt4 key购买 nike

我希望能够从 Excel VBA 宏调用 VSTO 插件中的函数。为了测试原理,我有以下 C# 代码。

namespace ExcelAddIn1
{
[ComVisible(true)]
public interface IThisAddIn
{
String GetText();
}

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public partial class ThisAddIn : IThisAddIn
{
public String GetText()
{
return "Now is the winter of dicontent made glorius summer by this son of York";
}
}
}

我有以下 VBA 脚本

Public Sub RunTest()
Dim txt As String
Dim AddInList As Object
Dim ExcelAddIn1 As COMAddIn
Dim ThisAddIn As Object

Set ExcelAddIn1 = Application.COMAddIns("ExcelAddIn1")

txt = ExcelAddIn1.Object.GetText()
Sheets(1).Cells(2, 1).Value = txt
End Sub

ExcelAddIn1.Object = Nothing

微软演练 https://learn.microsoft.com/en-gb/visualstudio/vsto/walkthrough-calling-code-in-a-vsto-add-in-from-vba好像有点糊涂了。

我想我可能需要添加 RequestComAddInAutomationService 但它并不像演练中描述的那样工作。当我尝试在 RequestComAddInAutomationService 中实例化我的类的实例时,我得到的错误基本上告诉我我需要提供一个 ApplicationFactory 和 IServiceProvider 作为参数。

private ThisAddIn utilities;

protected override object RequestComAddInAutomationService()
{
if (utilities == null)
utilities = new ThisAddIn();

return utilities;
}

最佳答案

派生自 IThisAddIn 的类必须不同于主 vsto 类(如在 Microsoft 示例中),因此只需将您的代码替换为:

  [ComVisible(true)]
public interface IComAddIn
{
String GetText();
}

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class AddInUtilities : IComAddIn
{
public String GetText()
{
return "Now is the winter of dicontent made glorius summer by this son of York";
}
}

在 vsto 中:

    public partial class ThisAddIn
{
private AddInUtilities utilities;

protected override object RequestComAddInAutomationService()
{
if (utilities == null)
utilities = new AddInUtilities();

return utilities;
}
....

此外,当您在 VBA 中调用 Application.COMAddIns 时,请确保您作为参数提供的字符串对应于您的 vsto 项目的 AssemblyTitle

PS 无需“注册 com interop”。

关于c# - 在 VSTO office 插件中创建可调用函数 - COMAddIns.Object 始终为 Nothing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51909804/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com