首页 > 解决方案 > 如果在数组中找到匹配项,则删除一行

问题描述

我在从工作表中删除某些行时遇到问题。

该工作表仅包含两列,名称和年龄:

姓名 年龄
约翰 20
艾丽西亚 10
约翰 20
艾丽莎 22
艾丽莎 22
艾丽西亚 10

该脚本获取名称列表,并在工作表中搜索此列表的元素以消除找到这些名称的行。因此,如果您将具有整数 [20, 10, 22] 的列表传递给脚本,则工作表应该只包含 John、Alice 和 Alissa 的行一次。即只删除第一次出现。现在我已经尝试过了:

const ss = SpreadsheetApp.openById("ID");
const sheet = ss.getSheetByName("Sheet1");
const data = sheet.getDataRange().getValues();

function clearRow() {
    let ages = [22, 20, 10];
    ages.forEach(age => {
        let ageFinder = sheet.createTextFinder(age.toString());

        var result = ageFinder.findAll();
        console.log(result.length);
        Logger.log("Delete row: " + result[result.length - 1].getRow());
        sheet.deleteRow(result[result.length - 1].getRow());
    })
}

我遇到的问题是所有匹配项都被删除,即使数组中只有 20、22 和 10 出现一次。

数组 [20,22,10] 的预期输出:

姓名 年龄
约翰 20
艾丽西亚 10
艾丽莎 22

有人可以帮我解决这个问题吗?

提前致谢!

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


你可以使用这个:

您的代码:

function clearRow() {
    let ages = [20, 22, 10];
    ages.forEach(age => {
        let ageFinder = sheet.createTextFinder(age.toString());

        var result = ageFinder.findAll();
        if(result.length>0){
          sheet.deleteRow(result[0].getRow());
        }
    })
}

输出:

前:

在此处输入图像描述

后:

在此处输入图像描述


它能做什么?

  1. 使用Sheet.createTextFinder(findText)创建一个文本查找器以在工作表中查找特定字符串

  2. 使用TextFinder.findAll()获取所有匹配的单元格

  3. 通过获取结果数组的零索引来获取第一个匹配单元格的行索引

  4. 使用Sheet.deleteRow()删除行


推荐阅读