根据行中单元格中包含的值删除 google 电子表格中的行

Delete a row in google spreadsheet based on value contained in a cell in row

所以这是一个以前被问过的问题,稍微不同:我需要删除 google sheet 中基于该行中单元格中包含的值的行.

问题是我发现以前的答案只允许我在值准确的情况下执行此操作。我有一个 LET AGREED 短语,它偶尔会出现,但它也与单元格中的其他文本一起出现。我想删除所有出现 LET AGREED 短语的行。

我找到的两个非常接近的解决方案:

Delete a row in google spreadsheet base on value of cell in row

Delete a row in google spreadsheet base on contents of cell in row

感谢任何帮助,我对 Google 脚本不是很好!

我假设您希望在编辑某些内容时发生这种情况? .search() 方法可以调用字符串来查看是否存在子字符串。如果是,它 returns 找到它的位置的索引。如果没有找到,则returns-1.

这是一个 onEdit 触发器,它会在您 sheet 上的任何内容发生更改时被调用。因此,一旦文本 "LET AGREED" 保存在单元格中,该行就会消失。

此外,如果您要复制并粘贴到此 sheet 一系列数据中,其中单词 "LET AGREED" 将出现在许多行中,它将能够处理删除所有这些行.

function onEdit(e) {

    var ss = e.source;
    var sheet = ss.getSheets()[0];
    var range = sheet.getDataRange();
    var values = range.getValues();

    var rows_deleted = 0; 

    for (var i = 0; i < values.length; i++) {
        for (var j = 0; j < values[i].length; j++) {

            var value = values[i][j];

            //row numbers are 1-based, not zero-based like this for-loop, so we add one AND...
            //every time we delete a row, all of the rows move down one, so we will subtract this count
            var row = i + 1 - rows_deleted;

            //if the type is a number, we don't need to look
            if (typeof value === 'string') {

                var result = value.search("LET AGREED");

                //the .search() method returns the index of the substring, or -1 if it is not found
                //we only care if it is found, so test for not -1

                if (result !== -1) {
                    sheet.deleteRow(row);
                    rows_deleted++;
                }
            }  
        }
    }
};