google-apps-script - 根据来自另一个特定单元格范围的值从特定范围删除谷歌电子表格中的行
问题描述
我的脚本需要一点帮助。
首先,这里是 ss 的链接:https ://docs.google.com/spreadsheets/d/1TgG64irjoxkV9wKlT5bEnaNEWlGyOlNxVoLxOmQZ2BA/edit?usp=sharing
我想根据工作表“概览”(范围:C4:C12)中的值从工作表“团队 1”(范围:A15:A41)中删除行。
基本上,如果在 A15:A41 中找到 C4:C12 中的任何值,则应删除找到的行。
前任。对于我的 ss:C4 = 3,这意味着在工作表“Team 1”中,应删除第 17 行。
到目前为止我的脚本:
function deleteRows() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s1 = ss.getSheetByName('Overview');
var s2 = ss.getSheetByName('Team 1');
var r1 = s1.getRange("C4:C12");
var v1 = r1.getValues();
var r2 = s2.getRange("A2:A28");
var v2 = r2.getValues();
for (var i = v2.length - 1; i >= 0; i--)
if (v2[i][0] == v1)
s2.deleteRow(i + 2);
};
我不知道如何让它来比较整个范围内的数据,而不仅仅是来自单个单元格。
谢谢。
解决方案
我相信你的目标如下。
- 您想通过将工作表
Team 1
中的单元格“C4:C12”与工作表Overview
中的单元格“A2:A28”进行比较来删除工作表的行Team 1
。
对于这个,这个修改怎么样?
修改点:
- 在这种情况下,需要比较“C4:C12”和“A2:A28”的所有值。但是当每个值
v2
与循环中的所有值进行比较时v1
,处理成本会很高。因此,首先,它创建一个用于搜索值的对象,并使用该对象运行搜索。
当你的脚本被修改后,它变成如下。
修改后的脚本:
从:for (var i = v2.length - 1; i >= 0; i--)
if (v2[i][0] == v1)
s2.deleteRow(i + 2);
到:
var obj = v1.reduce((o, [e]) => (Object.assign(o, {[e]: true})), {});
for (var i = v2.length - 1; i >= 0; i--)
if (obj[v2[i][0]])
s2.deleteRow(i + 2);
参考:
推荐阅读
- python - Numpy Matrix 删除等于数组的行
- css - TailwindCSS 暗模式莫名其妙的行为
- google-sheets - 使用 IMPORTRANGE 从具有动态单元格引用的工作表中获取数据
- c++ - 为什么编译时执行比运行时执行快得多?
- sql - 与 group by 进行内部连接并查找列中重复值的计数
- ios - 没有裁剪方形视频 - iOS
- javascript - 摩纳哥编辑器 setSelection 删除我的课程
- asp.net-mvc - 我可以在 Asp.Net MVC 5.0 中阻止空白 TextArea 的 ModelState.Value 吗?
- c - 即使在初始化变量后输出中的随机值
- php - 由于删除根数据库,无法访问 PHPmyadmin