使用 Office.js 在 Excel 中删除 table 中的空行

Deleting empty rows in a table in Excel with Office.js

抱歉,这是一个非常基本的问题。我正在尝试遍历 Excel table 并使用新的加载项模型删除任何空行。我是 javascript 的新手,所有的异步性和回调都让我陷入困境!

因为我认为这很简单,所以我想知道是否有人可以 post 快速代码示例或建议必须是最简洁的方法吗?抱歉,如果我在文档中遗漏了它。

非常感谢。

蒂姆

我建议您使用宏记录器工具来完成基本工作。然后在带有空行测试的基本 For Each Cell 循环中使用它来完成您的工作。

以下代码应该可以满足您的需求。

Excel.run(function(ctx) {
    var rows = ctx.workbook.tables.getItem('YourTableName').rows;
    rows.load("values"); // We'll need the rows values to check if they're empty.
    return ctx.sync().then(function() {
        // Important to go through the items in reverse fashion as deleting a row shifts the rest up.
        rows.items.reverse().forEach(function(row) {
            // row.values is a double array. Although, we know it can only contain one row.
            var isEmpty = row.values[0].every(function(col) {
                return col === "";
            });

            if (isEmpty) {
                row.delete();
            }
        });
    }).then(ctx.sync);
}).catch(function(error) {
    console.log("Error: " + error);
    if (error instanceof OfficeExtension.Error) {
        console.log("Debug info: " + JSON.stringify(error.debugInfo));
    }
});

希望对您有所帮助,

Gabriel Royer - Office 可扩展性团队的开发人员,MSFT

只是

的一个函数
async function Do_Remove_Empty_Rows_Tbl(context, TblNameStr) {
    var rows = context.workbook.tables.getItem(TblNameStr).rows;
    rows.load("values");
    await context.sync();
    rows.items.reverse().forEach(function (row) {
        var isEmpty = row.values[0].every(function (col) {
            return col === "";
        });
        if (isEmpty) {
            row.delete();
        }
    });
    return context;
}