Table.getCell() 不适用于新插入行中的单元格
Table.getCell() not working on cell in newly inserted row
我正在尝试向 Word 中的 table 插入一个新行并更改新行中单元格的内容。我遇到的问题是插入行后,Word api 无法在新行中找到单元格。
下面我添加了一个非常简化的代码版本。
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();
});
有没有办法让它工作或者这是一个错误?
(请不要建议在插入行上使用值参数,因为我的实际代码要复杂得多)
发生这种情况的原因是您没有重新加载 table
对象。您需要告诉 API 在 sync()
接收该请求之前显式重新加载 table
:
let row = table.rows.items[table.rowCount - 1];
row.insertRows("After", 1);
context.load(table, {expand: "rows/items/cells/items/body"});
await context.sync();
解决这个问题的另一种方法是只加载您添加的行,而不是重新加载整个 table。您可以通过加载 insertRows()
:
返回的 tableRowCollection
来做到这一点
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");
我正在尝试向 Word 中的 table 插入一个新行并更改新行中单元格的内容。我遇到的问题是插入行后,Word api 无法在新行中找到单元格。 下面我添加了一个非常简化的代码版本。
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();
});
有没有办法让它工作或者这是一个错误?
(请不要建议在插入行上使用值参数,因为我的实际代码要复杂得多)
发生这种情况的原因是您没有重新加载 table
对象。您需要告诉 API 在 sync()
接收该请求之前显式重新加载 table
:
let row = table.rows.items[table.rowCount - 1];
row.insertRows("After", 1);
context.load(table, {expand: "rows/items/cells/items/body"});
await context.sync();
解决这个问题的另一种方法是只加载您添加的行,而不是重新加载整个 table。您可以通过加载 insertRows()
:
tableRowCollection
来做到这一点
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");