我想自动尝试将输入参数从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;错误。我是在正确的轨道上吗?我还需要做什么?
答案 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>