如何在经过过滤的office-js Excel表的开头添加新行?

时间:2018-07-23 12:54:09

标签: office-js

在Excel加载项中使用office-js,我使用以下代码在表中添加一行:

Excel.run(async (context) => {
    const sheet = context.workbook.worksheets.getItem('mySheet');
    const table = sheet.tables.getItemAt(0);

    const newValues=[['val1', 'val2']];
    table.rows.add(0, newValues);
    await context.sync();
});

在我过滤表格之前(通过使用表格标题中的内置过滤器),效果很好。然后我得到这个错误: InsertDeleteConflict on TableRowCollection.add

我尝试使用“ table.getDataBodyRange();”以另一种方式进行操作:

    const range = table.getDataBodyRange();
    const rangeRow = range.getRow(0);
    rangeRow.getEntireRow().insert('Down');
    await context.sync();
    const insertedRange = range.getRow(0);
    insertedRange.values = [['val1', 'val2']];
    await context.sync();

在这种情况下,将创建行,但是未设置值。

我是否错过了某些事情,还是有另一种方法可以在过滤后的表格中创建一个包含我的值的新行?

[edit]此新行应添加到表的开头。

1 个答案:

答案 0 :(得分:0)

这里的诀窍是在表格末尾插入。如果将“ null”传递给table.rows.add,它将追加一行。

您还可以大大简化代码,请查看以下内容:  (顺便说一句,here is a gist您可以在脚本实验室中进行还原。)

async function run() {
    await Excel.run(async (context) => {
        const newValues = [['val1', 'val3']];
        const table = context.workbook.worksheets.getItem('Sheet1').tables.getItem("Table1").rows.add(null, newValues);
        await context.sync();
   });
}