Пакетирование в пользовательских функциях

Вот что происходит:

  1. Вы вызываете process(my_start_list).
  2. В функции блок if выполняется, если len(my_list) > 1, и нет там же. Теперь, поскольку else не был выполнен, и поскольку это единственное место, где у вас есть предложение return, вы возвращаете значение по умолчанию, которое является None.
  3. Если у вас есть 0 или 1 элемент в ваш список, вы вернете этот список.

Чтобы исправить это, вы хотите вернуть список, возвращенный process(my_list).

То есть:

def process(my_list):
    # do some stuff
    ...
    if len(my_list) > 1:
        return process(my_list)
    else:
        print(my_list)
        return my_list
1
задан Muruga ananth 13 July 2018 в 11:22
поделиться

2 ответа

Спасибо. Рекомендуемый подход заключается в том, чтобы поставить ваши элементы / args в глобальный массив. Каждый раз, когда приходит новый запрос, таймер настраивается для непрерывного выполнения, пока не останется больше элементов. Вам нужно будет объявить функции как асинхронные, установив «sync: false» в ваши функции. Json. Проверка на примере для вас, и в этой статье приведен пример сохранения состояния.

https://docs.microsoft.com/en-us/office/dev/add-ins/excel / заказная-функция-обзор # сберегательные и обмен состояния

0
ответ дан Keyur Patel - MSFT 17 August 2018 в 13:04
поделиться
  • 1
    Спасибо Keyur. Попробует и обновится, если что-то потребуется. – Muruga ananth 17 July 2018 в 08:39
  • 2
    Привет, Keyur. Также еще одно уточнение, что отладка асинхронных пользовательских функций, способных выполнять только пост-хостинг приложения, но во время разработки не в состоянии выполнить отладку кода пользовательских функций в файле .js. Например, если я выбираю одну форумку в одной ячейке и в нее вставляется файл .js, который открывается как динамический (runtime) файл, поэтому отладка не попадает в файл исходного кода в Visual Studio. Можете ли вы предложить по этому поводу. – Muruga ananth 17 July 2018 в 11:49
  • 3
    Мы сделаем заметку, но для отладки мы все еще работаем над тем, чтобы включить это, поэтому лучше всего в настоящее время попробовать его в своем браузере. Мы собираемся перейти на новую JS-среду выполнения (ChakraCore в Windows), и мы расскажем о том, как отладить это, с фокусом, начинающимся сначала с кода браузера / VS. – Keyur Patel - MSFT 17 July 2018 в 21:21
  • 4
    Спасибо Keyur за обновление. – Muruga ananth 18 July 2018 в 14:12

Как сказал Кейур, для вашей очереди будет выбрана глобальная очередь и какой-то таймер для отправки этой очереди.

Например, см. https://gist.github.com/ Zlatkovsky / 84c8d5749cf98009958cf6a641b22cbd

Обратите внимание, как функция возвращает Promise в качестве результата:

    function getSentimentFast(text: string): Promise<number> {
        return new Promise((resolve, reject) => {
            queue.add({
                text: text.substr(0, 1000),
                callback: function (sentiment) {
                    resolve(sentiment)
                }
            });
        });
    }

Затем он полагается на таймер в очереди для отправки API вызывает пакеты и вызывает обратный вызов (который, в свою очередь, разрешит Promise).

0
ответ дан Michael Zlatkovsky - Microsoft 17 August 2018 в 13:04
поделиться
  • 1
    Спасибо, Майкл. Другое дело, что я застрял в том, что получаю массив строк excel (множественный выбор) от excel до файла customfunction.js, используя JSON-файл. Я пробовал с размерностью, как "матрица" вместо этого "скалярный" но все же я получаю одно значение от excel при выполнении нескольких выборов. Пожалуйста, порекомендуйте. – Muruga ananth 18 July 2018 в 14:11
  • 2
    @Murugaananth, я предлагаю вам открыть новый вопрос на нем, с скриншотом – Michael Zlatkovsky - Microsoft 18 July 2018 в 14:46
  • 3
    Я открыл новый вопрос под названием «пакетные функции в пользовательских функциях-using-office-js». Не могли бы вы помочь в этом. – Muruga ananth 24 July 2018 в 16:05
Другие вопросы по тегам:

Похожие вопросы: