Пользовательская функция Excel JS не возвращает матрицу

Я пытаюсь реализовать пользовательскую функцию Excel (JavaScript), которая возвращает матрицу строк.

Согласно Создание пользовательских функций в Excel (предварительная версия) В этом случае для resultDimensionality необходимо установить матрицу.

Для простоты я просто скопировал пример из документации, чтобы вернуть такой массив массивов:

function getstringmatrix () {
    return [["first","row"],["second","row"],["third","row"]];
}    
Excel.Script.CustomFunctions["MYFUNCTIONS"]["GETSTRINGMATRIX"] = {
    call: getstringmatrix,
    result: {
        resultType: Excel.CustomFunctionValueType.string,
        resultDimensionality: Excel.CustomFunctionDimensionality.matrix,
    },
    parameters: [ ],
    options:{ batch: false, stream: false }
};

При вставке функции = MYFUNCTIONS.GETSTRINGMATRIX () в ячейку Excel эта ячейка заполняется строкой «first». Но ожидаемый второй столбец и две другие строки вообще не заполнены!


person Kai    schedule 20.11.2017    source источник


Ответы (1)


Созданную вами функцию следует использовать в Формула массива в Excel. Формулы массива - это расширенный тип формул, требующий от пользователя ввода их определенным образом.

  1. Сначала выберите диапазон ячеек, в который вы хотите поместить вывод формулы (в вашем случае выберите диапазон из 3 строк и 2 столбцов)
  2. Затем введите формулу: =MYFUNCTIONS.GETSTRINGMATRIX()
  3. Затем введите Ctrl + Shift + Enter. Это стандартный способ ввода формул массива в Excel.

В Excel есть собственные функции, которые также возвращают массивы таким образом, например =LINEST().

Конечно, функции, которые принимают диапазоны в качестве входных данных, не требуют какого-либо специального способа их ввода - только функции, которые выводят массивы, требуют, чтобы пользователь делал что-то особенное.

-Майкл, личка для надстроек

person Michael Saunders    schedule 21.11.2017
comment
Спасибо, Майкл. Конечно, но не лучше ли было бы также предоставить способ вставки обычной формулы, и в случае, если эта формула возвращает матрицу, Excel автоматически отображает ее как формулу массива? Вы уже продемонстрировали такую ​​функцию в своем видео Microsoft Ignite Custom Functions в 6:40 при вставке = CFACTORY.TRACKTEMPERATURE (G1). Эта формула автоматически заполняет несколько ячеек. Это именно то, чего я хочу достичь. - person Kai; 22.11.2017
comment
Ха, это очень наблюдательно! Да, в своей демонстрации я не использовал формулу массива. Мы все еще работаем над этой функцией и еще не выпустили ее. У меня нет подробностей, таких как даты, но ваши пользовательские функции вывода матрицы будут намного проще использовать в будущем;) - person Michael Saunders; 22.11.2017
comment
Есть ли в этом прогресс? - поскольку попытка сделать Ctrl + Shift + Enter в веб-версии Excel, похоже, ничего не дает. Я ожидал, что к настоящему времени задокументированный тип возвращаемого значения матрицы будет реализован в той или иной форме? - person James Boman; 06.03.2019
comment
Только что обнаружил, что это работает так, как задумано в сборке Desktop Excel Office Insider, но еще не работает в веб-клиенте. - person James Boman; 06.03.2019