Excel не распознает функцию C# с аргументами DateTime

Я хочу построить надстройку Excel со следующими функциями:

[ExcelFunction()]
public static  double myAverage1(double[] inputVector)
{
    return inputVector.Sum()/inputVector.Length ;
}

[ExcelFunction()] 
public static double myAverage2(DateTime[] TS1_DateTime) 
{
    return 12.5;
}

Проблема в том, что Excel не распознает функцию myAverage2.

Проблема связана с типом DateTime, я пытался изменить его на тип String, но функция strill не распознается. Есть идеи, как решить эту проблему?

В конечном итоге я хочу дать функции два массива DateTime и вернуть их пересечение.

1 ответ

Согласно этой ветке, Excel-DNA должен автоматически маршалировать DateTime значения как double с помощью ToOADate а также FromOADate методы.

Я сам не пробовал, но думаю, что он не настроен на обнаружение массивов или списков DateTime, но только один DateTime параметры.

Попробуйте объявить параметр как double[] и затем внутри функции сделайте что-то вроде:

DateTime dt[] = values.Select(x => DateTime.FromOADate(x)).ToArray();

Или просто позвоните FromOADate на каждое значение индивидуально, в зависимости от потребностей вашей функции.

Несмотря на то, что функция объявлена ​​как double[] вы все равно сможете передавать массив ячеек, содержащих даты, так как Excel все равно пожелает передать их как даты автоматизации OLE.

Другие вопросы по тегам