У меня есть надстройка Excel 2016 (область задач), которая вставляет около 92000 строк и 100 столбцов в лист. Все данные делятся на пакеты на сервере и отправляются на страницу панели задач пакетами. На странице панели задач java-скрипт вставляет данные из каждого пакета в текущий рабочий лист, используя Excel.run с параметром {delayForCellEdit: true}.
Все данные для вставки представляют собой двойной массив строк
[
["a_1_1", "a_1_2", "a_1_3", ..., "a_1_100"],
["a_2_1", "a_2_2", "a_2_3", ..., "a_2_100"],
...
["a_92000_1", "a_92000_2", "a_92000_3", ..., "a_92000_100"],
]
Packet - JavaScript object, for example first packet will be
Packet={
"number": "1of920",
"data":[
["a_1_1", "a_1_2", "a_1_3", ..., "a_1_100"],
["a_2_1", "a_2_2", "a_2_3", ..., "a_2_100"],
...
["a_100_1", "a_100_2", "a_100_3", ..., "a_100_100"],
]
}
Функция, которая вставляет данные пакета, выглядит следующим образом.
function addDataIntoSheet(Packet){
var startindex = 100 * (parseInt(Packet.number.split('of')[0]) - 1 );
var pExRun = Excel.run({ delayForCellEdit: true }, function (context) {
var currwsheet = context.workbook.worksheets.getActiveWorksheet();
Packet.data.forEach(function (row, index, obj) {
var rowsrange = currwsheet.getRangeByIndexes(startindex + index, 1, 1, row.length);
var rangevalues = new Array(1);
rangevalues[0] = row;
rowsrange.values = rangevalues;
});
return context.sync();
});
pExRun.then(function(){
console.log("Packet " + Packet.number + " inserted");
});
pExRun.catch(function (error) {
console.log("Error: " + error);
if (error instanceof OfficeExtension.Error) {
console.log("addRowsAndDataIntoSheet Debug info: " + JSON.stringify(error.debugInfo));
}
});
}
ВОПРОС:
Во время тестов я заметил, что если пользователь начинает редактировать ячейку нажатыми кнопками Excel или изменяет размер строки или столбца, будет выдано следующее исключение:
"code": "GeneralException", "message": "Дождаться завершения предыдущего вызова"
и в результате некоторые пакеты не вставляются в лист.
Если пользователь спокойно ждет, вставка данных завершается без ошибок.
ВОПРОС:
Пожалуйста, порекомендуйте, как решить эту проблему и вставить большой объем данных, несмотря на активность пользователя.