Ошибка копирования-вставки (в цикле) в несколько диапазонов Excel онлайн с использованием office.js

Я пытаюсь заполнить несколько диапазонов с помощью формулы, а затем преобразовать диапазон в значения, используя вставить как значение. Надстройка Office используется в Sharepoint Excel в Интернете. Код обычно работает, но время от времени я получаю ошибку "Rich API: Произошла внутренняя ошибка", из-за которой формулы не заменяются значениями. После первого раза ошибка возникает при каждой последующей попытке, она вылетает с ошибкой "Rich API: Timeout". Есть около 300 диапазонов размером примерно 25x25.

Код:

async function loadValues() {
        //This function is exectued to fill some ranges after data is retrived from server and pasted in a bacckend table
        await Excel.run(async function main(context) {
            context.workbook.application.calculationMode = "Manual";
            let names = context.workbook.names
            context.application.suspendScreenUpdatingUntilNextSync();
            var rng = names.getItem("controlsToUse").getRange();
            rng.load("values");
            await context.sync();
            context.application.suspendScreenUpdatingUntilNextSync();
            // Controls to use contains the name of the ranges in which data has to be loaded and the ranges from which formula to load data has to be copied
            var controlsToUse = rng.values;
            for (i = 0; i < controlsToUse.length; i++) {
                // str is the range in which data has to be pasted and str1 is the range from which formula has to be copied
                var str = controlsToUse[i][0];
                var str1 = controlsToUse[i][1];
                var range1 = names.getItem(str).getRange();
                range1.copyFrom(str1, Excel.RangeCopyType.formulas);
                range1.untrack();
            }
            await context.sync();
            context.workbook.application.calculate();
            await context.sync();
            context.application.suspendScreenUpdatingUntilNextSync();
            for (i = 0; i < controlsToUse.length; i++) {
                var str = controlsToUse[i][0];
                var range1 = names.getItem(str).getRange();
                range1.copyFrom(str, Excel.RangeCopyType.values);
                range1.untrack();
            }
            await context.sync();
            context.workbook.application.calculationMode = "Automatic";
            await context.sync();
        }).catch(errorHandler)
    }

1 ответ

Вы можете прокомментировать context.runtime.enableEvents = false; и проверьте, работает ли?

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