2016-11-19 18 views
0

我想自动尝试输入参数从Excel友好的类型转换为那些在我的外接程序有用,反之亦然回Excel与返回值。例如,我想定义的Excel函数(如C#的方法),如:ExcelDNA参数和返回类型自动转换

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

我想让它转换我的输入参数和返回值,即I“幕后”定义一些从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的吐出一个“不支持的签名”错误。我在正确的轨道上吗?我还需要做什么?

回答

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(); 
    } 
    
  • 你MIG HT想在你的。DNA文件中添加一个ExplicitRegistration='true'属性抑制默认处理: <DnaLibrary Name="My Add-In" RuntimeVersion="v4.0" > <ExternalLibrary Path="XXX.dll" ExplicitRegistration="true" .... /> </DnaLibrary>