ExcelDNA参数和返回类型自动转换

时间:2016-11-19 16:01:26

标签: c# excel-dna

我想自动尝试将输入参数从Excel友好类型转换为在我的AddIn中有用的类型,反之亦然,将返回值转换回Excel。例如,我想定义一个Excel函数(作为C#方法),如:

public static Vector<double> MyFunction(Vector<double> inputVector)
{
    // do some stuff to inputVector
    return inputVector
}

我希望它可以转换我的输入参数并在幕后返回值,即我定义了一些用于从object转换为Vector<double>的通用转换方法反之亦然,这是在它们传入/传出我定义的方法之前调用的。

这可能吗?我在github repo中找到ParameterConversionConfiguration,但我不太确定如何使用它。是否有任何示例或进一步的文档?我可以看到我可能需要以某种方式注册我的类型转换,但我不确定如何继续。

编辑:经过更多的游戏后,我这样做是为了将矩阵的返回值转换为数组:

public class ExcellAddIn : IExcelAddIn
{
    public void AutoOpen()
    {
        var conversionConfig = GetParameterConversionConfig();
    }

    static ParameterConversionConfiguration GetParameterConversionConfig()
    {
        var paramConversionConfig = new ParameterConversionConfiguration()
            .AddReturnConversion((Matrix<double> value) => value.ToArray());
        return paramConversionConfig;
    }
}

但是在加载.xll后,Excel会发出一个不受支持的签名&#39;错误。我是在正确的轨道上吗?我还需要做什么?

1 个答案:

答案 0 :(得分:0)

这里有一个完整的示例加载项,在这里使用这些Excel-DNA注册扩展:https://github.com/Excel-DNA/Registration/tree/master/Source/Samples/Registration.Sample

与您的问题相关的一些细节:

  • 您实际上需要获取功能注册,应用转换并在AutoOpen中执行注册:

    public void AutoOpen()
    {
        var conversionConfig = GetParameterConversionConfig();
        ExcelRegistration.GetExcelFunctions()
                         .ProcessParameterConversions(conversionConfig)
                         .RegisterFunctions();
    }
    
  • 您可能希望通过在.dna文件中添加ExplicitRegistration='true'属性来取消默认处理: <DnaLibrary Name="My Add-In" RuntimeVersion="v4.0" > <ExternalLibrary Path="XXX.dll" ExplicitRegistration="true" .... /> </DnaLibrary>