目前,我有一张包含先前学生姓名和 ID# 的工作表。目前大约有 3000 条记录。
在第二个工作表中,我列出了新名称(通过表单输入)。
目前我正在使用以下内容检查是否有先前的记录:
=IFERROR(INDEX(Students!A:A,MATCH(K2, Students!B:B; 0)), "NEW STUDENT")
但是电子表格变得很慢。
谷歌脚本会更好吗?如果是这样怎么办?
谢谢
目前,我有一张包含先前学生姓名和 ID# 的工作表。目前大约有 3000 条记录。
在第二个工作表中,我列出了新名称(通过表单输入)。
目前我正在使用以下内容检查是否有先前的记录:
=IFERROR(INDEX(Students!A:A,MATCH(K2, Students!B:B; 0)), "NEW STUDENT")
但是电子表格变得很慢。
谷歌脚本会更好吗?如果是这样怎么办?
谢谢
“更好的”?这太主观了。我们只谈性能。
您应该能够编写一个脚本来执行这些特定的查找比您当前的电子表格快得多。主要因素是正在执行的计算次数;
每次工作表发生更改时,都会重新计算电子表格公式。因此,您的“新学生”检查第二个工作表中已有的学生是在浪费时间。
表单提交触发函数理想情况下会针对表单进行查找,并且仅针对新的学生数据。
一个脚本可以ScriptDB
用来存储所有 Prior 学生姓名和 ID,从而无需反复阅读 Prior 学生电子表格,并提供快速查找。
...
var db = ScriptDb.getMyDb();
var result = db.query({id: newId});
if (!result.hasNext()) {
event.range.offset(0,statusColumn).setValue("NEW STUDENT");
}
反点确实存在,这里只是一对。
您可以尝试不同的公式。例如,在这个示例电子表格中,我在 Sheet1 中添加了 10,000 行假数据。我在 Sheet2!A1 中的单元格中加入了第一个名称列和第二个名称列,如下所示:
=arrayformula(join(";", Sheet1!B:B & " " & Sheet1!C:C))
然后我可以在这个长字符串中执行一个新名称的文本搜索。例如以下:
=find("Peter Piper"&";", Sheet2!A1)
它很快。
可能这会起作用 =dget(Students!A:B,Students!$A$1,{Students!$B$1;$K$2}) 给定 k2 是搜索文本。
如果你得到#na!,你就会得到新学生。如果#num!那么你有多个匹配。dget 是一个数据库函数。因此它可以很好地处理大数据。但是它没有那么灵活但高效的功能。