2

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

由于我认为这很简单,我想知道是否有人可能会好心地发布一个快速的代码示例或建议必须以最干净的方式做到这一点?抱歉,如果我在文档中错过了它。

提前谢谢了。

蒂姆

4

3 回答 3

1

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

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 - Microsoft Office 可扩展性团队的开发人员

于 2015-12-01T00:26:16.010 回答
0

只是一个基于@GabRoyers 答案的函数!

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;
}
于 2022-03-04T17:54:26.560 回答
-4

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

于 2015-11-30T14:49:21.893 回答