Функция Excel DNA перестает работать после изменения параметра

У нас есть работающее приложение, которое запускается с использованием C# и ДНК Excel для создания функций, которые обращаются к веб-службе Java в удаленном месте (с использованием RTD-сервера).

Это приложение работало нормально, пока мы не добавили необязательные параметры в одну из наших функций (я действительно не знаю, связана ли проблема с необязательными параметрами, мы внесли другие изменения, пока не выявили эту проблему).

У меня есть что-то вроде приведенного ниже кода (к сожалению, мне пришлось изменить имена функций и параметров):

[ExcelFunction(Description = "XXXXX", Name = "FUNCTION", IsVolatile = true)]
        public static object[,] Function(
            [ExcelArgument(Description = "XXXX", Name = "paramA")]
            string paramA,
            [ExcelArgument(Description = "XXXX", Name = "paramB")]
            string paramB,
            [ExcelArgument(Description = "XXXX", Name = "paramC")]
            string paramC,
            [ExcelArgument(Description = "XXXX", Name = "optional")]
            params string[] optional)
{
...
}

В первый раз, когда я вызываю эту функцию, она всегда работает в первый раз. Но если я что-то изменю в значениях параметров, он перестанет работать. Что случилось? Строка, вызывающая функцию, просто превращается в одну строку.

=FUNCTION("aaa";"bbb";"ccc") 

по значению ячейки.

Кто-нибудь знает, как избежать такого поведения? Я не опытный офис или даже разработчик .Net, поэтому я мог пропустить некоторую важную информацию о проблеме. Не стесняйтесь спрашивать любую другую информацию.


person Raphael do Vale    schedule 27.02.2015    source источник


Ответы (2)


В настоящее время эта функция не будет зарегистрирована в Excel с помощью Excel-DNA. «params» и «Optional» игнорируются, а «string[]» не поддерживается.

Существует проект расширения для Excel-DNA (https://github.com/Excel-DNA/CustomRegistration), где мы добавляем поддержку таких расширенных типов и директив.

Чтобы упростить задачу, я предлагаю вам заменить последний параметр «params» несколькими параметрами типа «object» и протестировать каждый во время выполнения — они будут переданы как значения ExcelMissing, если они не появятся в формуле.

person Govert    schedule 28.02.2015
comment
Привет, я уже использовал плагин пользовательской регистрации ДНК в Excel, все равно спасибо =) - person Raphael do Vale; 03.03.2015

Я смог решить проблему.

Проблема заключалась в том, что я форматировал ячейку, в которой функция была записана в текст. В этом случае Excel не интерпретирует сигнал равенства (=) как оператор выражения.

Удаление этого форматирования (чтобы оно работало с опцией «общего» форматирования) решило проблему.

person Raphael do Vale    schedule 03.03.2015