Mit dem Office-JavaScript-API, Ich versuche, eine ausgewählte Tabelle mit dem folgenden Code zu füllen:MS Word API: Stellen Sie Tabellenwerte geladen async
Word.run(function (context) {
var table = context.document.getSelection().parentTable;
table.load("values, rows/items/cells/items/body");
context.trackedObjects.add(table);
return context.sync().then(function() {
// loop over table
for (var row = 0; row < table.values.length; row++) {
for (var column = 0; column < table.values[row].length; column++) {
// use closures to keep cell index variables for ajax
(function (row, column, table, context) {
if ((table.values[row][column].trim() ==
"" || !table.values[row][column]) &&
table.values[row][0] && table.values[0][column]) {
$.ajax({
url: "https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/name/" +
table.values[row][0].replace(/\s/g, '') +
"/property/" + table.values[0][column] + "/txt"
}).done(function (data) {
// insert data
table.rows.items[row].cells.items[column].body.insertText(data);
console.log("data: " + data);
return context.sync().then(function() {
console.log("synced");
}).catch(function (e) {
console.log("0");
errorHandler(e);
});
}).error(function (e) {
console.log("1");
errorHandler(e);
});
} else {
console.log(row + " " + column + " not beeing set, it is " +
table.values[row][column]);
}
})(row, column, table, context);
}
}
}).then(context.sync().then(
function() {
console.log("last sync?");
}
).catch(function (e) {
console.log("2");
errorHandler(e);
}));
}).catch(function (e) {
console.log("3");
errorHandler(e);
});
Aber irgendwie funktioniert das nicht als eine Ausnahme ausgelöst wird :
ItemNotFound: ItemNotFound
die Quelle des Fehlers ist - gemäß dem lügt (0
) und den Fehler ("errorLocation":"TableRowCollection.getItem"
) an dem Einsatz-Datenteil.
Wie kann ich Word sagen, dass ich die Tabellenvariable für ein wenig länger behalten soll, da ich den Inhalt aktualisieren werde, sobald mein Ajax fertig ist?