2016-11-19 4 views
0

Я хотел бы автоматически попытаться преобразовать входные параметры из удобных для Excel типов в те, которые полезны в моем AddIn и наоборот, обратно в Excel с возвращаемыми значениями. Например, я хотел бы определить функцию Excel (как метод C#) как:Параметры ExcelDNA и тип возврата Автоматическое преобразование

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

Я хотел бы, чтобы он конвертировать свой входной Params и возвращать значение «за кадром», т.е. I определите некоторый общий метод преобразования для преобразования из object в Vector<double> и наоборот, и это вызывается до того, как они будут переданы в/из моего определенного метода.

Возможно ли это? Я нашел ParameterConversionConfiguration в github repo, но я не совсем уверен, как его использовать. Есть ли примеры или дополнительная документация? Я вижу, что мне, возможно, придется каким-то образом зарегистрировать преобразования типа, но я не уверен, как действовать дальше.

EDIT: После того, как несколько больше играть вокруг, я сделал это, чтобы преобразовать возвращаемое значение из матрицы в массив:

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-ДНК Регистрация расширений здесь: https://github.com/Excel-DNA/Registration/tree/master/Source/Samples/Registration.Sample

Некоторые детали, имеющие отношение к вашему вопросу:

  • Вы на самом деле нужно, чтобы получить регистрацию функции, применить ваше преобразование и выполнить регистрацию в вашем AutoOpen:

    public void AutoOpen() 
    { 
        var conversionConfig = GetParameterConversionConfig(); 
        ExcelRegistration.GetExcelFunctions() 
            .ProcessParameterConversions(conversionConfig) 
            .RegisterFunctions(); 
    } 
    
  • Вы МИГ ХТ хотят подавить обработку по умолчанию, добавив атрибут ExplicitRegistration='true' в файле .dna: <DnaLibrary Name="My Add-In" RuntimeVersion="v4.0" > <ExternalLibrary Path="XXX.dll" ExplicitRegistration="true" .... /> </DnaLibrary>