У меня есть приложение в магазине, которое работает в 2016 году, в Интернете и на Mac. Однако сегодня Excel Online перестал работать, в то время как 2016 и Mac в порядке. Трудно отследить, поскольку вызовы Excel.Run () просто вызывают «Общее исключение», но, похоже, это происходит, когда я вызываю вложенный Excel.Run (). Так нравится
Excel.run(function (ctx) {
var worksheets = ctx.workbook.worksheets.load("name");
return ctx.sync()
.then(function () {
...
anotherfunction()
а в другой функции () он снова вызывает Excel.run (), но затем выдает исключение.
** добавлено **, если я вызываю другую функцию () вне первого Excel.run (), тогда она работает.
Опять же, весь код работал несколько дней назад и все еще работает на 2016 и Mac, но не в Excel Online. Есть шанс, что Excel Online был обновлен, потому что это кажется странным и трудным для отладки. Я использую Office 365 на сайте office.com.
Извините, потратил на это весь день, и у меня закончились идеи.
Джон
* ниже добавлен полный фрагмент *
(function () {
// The initialize function must be run each time a new page is loaded.
Office.initialize = function (reason) {
$(document).ready(function () {
})
}
})();
function allSheetsClick() {
Excel.run(function (ctx) {
var worksheets = ctx.workbook.worksheets.load("name");
return ctx.sync()
.then(function () {
for (var i = 0; i < worksheets.items.length; i++) {
getSheetRange(worksheets.items[i].name);
}
});
}).catch(function (error) {
console.log("ERROR-" + error)
});
}
function oneSheetClick() {
getSheetRange("Sheet1");
}
function getSheetRange(sheetname) {
var myRange = "$A$1:$Z$100";
var bindingid = "MyBinding" + sheetname;
var sheetrange = sheetname + "!" + myRange;
// add binding
Office.context.document.bindings.addFromNamedItemAsync(sheetrange, "matrix", { id: bindingid }, function (asyncResult) {
if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {
console.log("Binding added.");
} else {
console.log("ERROR addBinding() - " + error);
}
});
Excel.run(function (ctx) {
var cells = ctx.workbook.worksheets.getItem(sheetname).getRange(myRange).load(["values", "formulasR1C1"]);
return ctx.sync()
.then(function () {
console.log("Got range. # rows - " + cells.values.length);
});
}).catch(function (error) {
console.log("ERROR getRange() - " + error)
});
}
Проблема возникает, если я добавляю привязку, которая вызывает исключение в более поздней версии Excel.Run (). Таким образом, в Excel Online он попадает в строку «console.log (« ERROR getRange () - «+ error)». Если я закомментирую добавление привязки, все будет работать.
Есть ли лучший способ структурировать это, чтобы мне не приходилось дважды вызывать Excel.Run ()? Но обратите внимание, что второй находится в функции, которая иногда вызывается напрямую.
Опять же, это работает в Excel 2016, но недавно (например, несколько дней назад) в Excel Online начали давать сбои. Позвольте мне, если вам еще что-нибудь понадобится, у меня есть образец сайта, если вам нужно его протестировать.