Как создать UDF, который возвращает 2-D массив

и отображает результат в двухмерных ячейках в Excel? Я использую C #, .NET, Excel-DNA, Add-In Express RTD,

благодаря

Редактировать Я пробовал http://excel-dna.net/2011/01/30/resizing-excel-udf-result-arrays/ , не работает для меня. Я хочу, чтобы sth вроде этого MyUDF (param1, param2) возвращает 2-D массив, например таблицу, основанную на длинах param1, param2 say param1 – это «a, b, c», param2 «высокий, низкий», ожидается возврат array [3,2] и отобразить результат в 3 строки по 2 столбца

Я также попробовал Excel ExcelDNA C # / Попробуйте скопировать поведение Bloomberg BDH () (записывая Array после веб-запроса) , он отлично работает. но мое требование – фоновая работа вызовет функцию RTD, функция RTD – это многоступенчатый процесс, сначала он войдет в систему (асинхронный, а затем подпишет (асинхронный)), когда я вызываю xlcall.RTD из фонового рабочего, он дает accessinviolation exception

Excel UDF и RTD являются пассивными вещами. Когда пользователь вводит формулу, Excel вызывает функцию UDF (функция RTD), чтобы вычислить формулу и вернуть результат в вызывающую (ые) ячейку (я). В отличие от RTD, UDF может узнать, откуда он вызван, но оба они не могут «расширить» вызывающий диапазон. Расширение диапазона также изменит формулы / значения в других ячейках – и это не относится к вещам, разрешенным для UDF; сервер RTD вообще не имеет доступа к объектной модели Excel.

Рассмотрим объединение COM-надстройки и RTD-сервера в одной сборке. Надстройка COM может обрабатывать событие SheetChange, чтобы определить, вводит ли пользователь формулу, относящуюся к вашему RTD. Когда это происходит, надстройка COM может заполнять любой требуемый диапазон ячеек формулами или данными, а также устанавливать некоторые флаги или хранить данные, доступные вашим RTD. Кроме того, RTD может вызывать открытый метод, определенный в надстройке, и он может заполнять любые ячейки таким образом. Если вы выберете этот параметр, вы, несомненно, вызовете такой метод в событии RefreshData. Обратите внимание, однако, что в этот момент Excel не может быть подготовлен к COM-вызовам, которые изменяют ячейки. Чтобы избежать потенциальных проблем, я рекомендую модифицировать ячейки после задержки, см. Метод ADXAddinModule.SendMessage () и событие ADXAddinModule.OnSendMessage. Дело в том, что событие OnSendMessage происходит только тогда, когда Excel заканчивает свои задачи и когда он готов к запросам.

Как вы думаете?

Отношения с Беларусью (GMT + 3),

Руководитель группы надстроек экс-президента Андрей Смолин

  • NPOI Редактирование файлов Excel с сводными таблицами и динамическими диаграммами
  • NPOI - Как отличить числовые Excel-ячейки datetime в формате (c #)
  • Как получить всю колонку в используемом диапазоне?
  • Как использовать формулы Excel в C #
  • Исправить текстовый файл с фиксированными столбцами в C #
  • Условные числовые форматы Excel в формате .Net
  • Удалить фильтры колонов в документе Excel с помощью OLE
  • Самый быстрый способ петли через столбец SQL Database в столбце Excel - C #
  • Чтение сводной таблицы с c #
  • jQuery вычисляет количество столбцов из диапазона excel
  • Научная нотация при импорте из Excel в .Net
  • Interesting Posts
    Давайте будем гением компьютера.