gpt4 book ai didi

c# - 在宏中调用 Excel 加载项函数

转载 作者:行者123 更新时间:2023-11-30 15:22:49 29 4
gpt4 key购买 nike

我正在为 Excel 2013 开发插件,我在 Excel 插件中创建了一个函数,如下所示

  public string ExcelReturnString()
{
return "This is the string: hi";
}

我已经使用下面的代码来调用该函数,但它抛出了一个错误。

Application.Run(ExcelReturnString)

如何在宏中调用插件功能?

最佳答案

这离直截了当最远,但这是您完成任务的方式。我将尽可能明确,因为我尝试这样做的前两三次,我错过了很多。

首先,当您创建承载 ExcelReturnString() 的类时,您需要使用具有以下属性的接口(interface)来装饰该类,然后还标记要公开的每个方法的属性.为了这个例子,我制作了加载项类“TestExcelAddIn”:

using System.Data;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

namespace TestExcelAddIn
{
[ComVisible(true)]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IStringGetter
{
string ExcelReturnString();
}

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
public class StringGetter : IStringGetter
{
public string ExcelReturnString()
{
return "This is the string: hi";
}
}
}

然后,在与您项目中的“Excel”关联的主类中,您必须按以下方式重写RequestComAddInAutomationService。同样,我将所有内容都包括在内,以便您知道哪个类是哪个类(我第一次阅读时并不知道)。

namespace TestExcelAddIn
{
public partial class ExcelTest
{
private StringGetter myAddIn;

protected override object RequestComAddInAutomationService()
{
if (myAddIn == null)
myAddIn = new StringGetter();

return myAddIn;
}

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
}

private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}

#region VSTO generated code
#endregion
}
}

现在 VBA 已准备好以下列方式使用此方法:

Sub Test()

Dim addin As Office.COMAddIn
Dim automationObject As Object
Dim returnString As String

Set addin = Application.COMAddIns("TestExcelAddIn")
Set automationObject = addin.Object

returnString = automationObject.ExcelReturnString

End Sub

你本可以给我 100 年的时间来解决这个问题,但我不会。实际上将罗塞塔石碑归功于 MSDN:

https://msdn.microsoft.com/en-us/library/bb608621.aspx?f=255&MSPPError=-2147217396

关于c# - 在宏中调用 Excel 加载项函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35224306/

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