javascript - 如果在数组中找到匹配项,则删除一行
问题描述
我在从工作表中删除某些行时遇到问题。
该工作表仅包含两列,名称和年龄:
姓名 | 年龄 |
---|---|
约翰 | 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 |
有人可以帮我解决这个问题吗?
提前致谢!
解决方案
你可以使用这个:
您的代码:
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());
}
})
}
输出:
前:
后:
它能做什么?
使用Sheet.createTextFinder(findText)创建一个文本查找器以在工作表中查找特定字符串
使用TextFinder.findAll()获取所有匹配的单元格
通过获取结果数组的零索引来获取第一个匹配单元格的行索引
推荐阅读
- python - 使用 Python 检查 Arduino 打印和如果条件满足播放声音
- entity-framework - 由于不同版本的 EntityFramework 导致 .NET Core 构建警告
- amazon-web-services - 限制云中数据的最佳做法是什么
- emacs - 没有名称为“QL”的包。安装夹子时
- python - 如何从 React [列表、数字、文件] 将数据发送到后端 (Django)
- java - Kafka Stream-GlobalKTable 加入特定字段
- java - 将数据转换为父、子、大子树格式的 Java 解决方案,如下所述
- python - pyenv 找不到 docker-compose
- http - 如何设置http授权标头值?
- html - 在网页中嵌入视频后删除 Youtube 品牌?