根据行中单元格中包含的值,在Google电子表格中删除一行

时间:2015-02-18 10:14:50

标签: google-apps-script google-sheets spreadsheet

所以这是一个之前提出过的问题,但有一点点不同:我需要根据该行中单元格中包含的值删除Google表格中的行。

问题是之前的答案我发现只有在值准确的情况下才允许我这样做。我有一个偶然出现的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 Scripts并不满意!

1 个答案:

答案 0 :(得分:2)

我认为你想在编辑某些东西时发生这种情况?可以将.search()方法称为字符串,以查看是否存在子字符串。如果是,则返回找到它的索引。如果未找到,则返回-1。

这是一个onEdit触发器,当工作表上的任何内容发生变化时,它会被调用。因此,文本" LET AGREED"保存在单元格中,该行将消失。

另外,如果您要复制并粘贴到此表单中的一系列数据,其中的单词是" 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++;
                }
            }  
        }
    }
};