2017-10-03 3 views
1

Ich versuche, eine neue Zeile in eine Tabelle in Word einzufügen und den Inhalt der Zellen in der neuen Zeile zu ändern. Das Problem, das ich habe, ist, dass nach dem Einfügen der Zeile das Wort api keine Zellen in der neuen Zeile finden kann. Im Folgenden habe ich eine sehr vereinfachte Version meines Codes hinzugefügt.Table.getCell() funktioniert nicht auf Zelle in neu eingefügte Zeile

await Word.run(async(context) => { 
    let table = context.document.body.tables.getFirstOrNullObject(); 
    context.load(table, { 
     expand: "rows/items/cells/items/body" 
    }) 
    await context.sync(); 

    let row = table.rows.items[table.rowCount - 1]; 
    row.insertRows("After", 1); 
    await context.sync(); 

    let cell = table.getCell(2, 0); //throws "ItemNotFound" exception 
    cell.body.insertText("test", "Replace"); 

    await context.sync(); 
}); 

Gibt es eine Möglichkeit, das funktioniert zu bekommen oder ist das ein Fehler?

(bitte schlagen nicht die Werte Parameter auf Einfügezeile Verwendung als meine eigentliche Code ist viel komplizierter)

Antwort

0

Der Grund dies geschieht, ist, dass Sie nicht das table Objekt neu geladen haben. Sie müssen die API sagen explizit table nachladen, bevor die sync() diesen Antrag abholen:

let row = table.rows.items[table.rowCount - 1]; 
row.insertRows("After", 1); 
context.load(table, {expand: "rows/items/cells/items/body"}); 
await context.sync(); 

Ein anderer Weg, um diesen Ansatz wäre nur die Zeile Sie lieber hinzugefügt haben zu laden, als die gesamte Tabelle neu zu laden. Sie können dies tun, indem Sie die tableRowCollection zurück Laden von insertRows():

let newRows = row.insertRows("After", 1); 
context.load(newRows, { expand: "items/cells/items/body" }); 
await context.sync(); 
newRows.items[0].cells.items[0].body.insertText("test", "Replace"); 
+0

Ich habe bereits versucht, diese und das Problem nicht beheben. Zusätzliche Information ist, dass ich anfänglich eine Tabelle von 2 Zeilen habe und eine Zelle in der letzten (neuen) Zeile ändern möchte – Nick

+0

Odd. Ich konnte deinen Fehler in ScriptLab replizieren. Hinzufügen von 'context.load (Tabelle, {expand:" rows/items/cells/items/body "});' vor dem Aufruf von 'sync()' löste es. Haben Sie nach dem Hinzufügen dieser Zeile den gleichen Fehler erhalten? –

+0

Ja, aber wenn ich mehr als 2 Zeilen in meiner ursprünglichen Tabelle in meinem Dokument habe, dann funktioniert es gut. Ich habe einige zusätzliche Tests durchgeführt und dein zweiter Vorschlag funktioniert für mich (Laden der neu hinzugefügten Zeile). Das Laden der gesamten Tabelle und das Abrufen einer Zelle der neu hinzugefügten Zeile aus der Tabellenebene funktioniert nicht. – Nick

Verwandte Themen