Google Script vs Formula - MATCHing Records

时间:2013-07-09 09:38:26

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

目前我有一张带有在先学生姓名和ID#的工作表。目前有大约3000条记录。

在第二张工作表中,我列出了新名称(通过表格输入)。

目前我正在使用以下内容检查是否有先前的记录:

=IFERROR(INDEX(Students!A:A,MATCH(K2, Students!B:B; 0)), "NEW STUDENT") 

但电子表格变得非常慢。

谷歌脚本会更好吗?如果是这样的话?

由于

2 个答案:

答案 0 :(得分:1)

“更好的”?这太主观了。我们只谈谈表演。

您应该能够编写一个脚本,以比当前的电子表格更快地执行这些特定的查找。主导因素是正在执行的计算次数;

  • 每次工作表发生更改时,都会重新计算电子表格公式。因此,您的“新生”会检查您在第二张工作表中已有的学生是否在浪费时间。

  • 表单提交触发器功能理想情况下会执行查找以响应表单,并且仅针对新学生数据。

  • 脚本可以使用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");
    }
    

确实存在反对点,这里只是一对。

  • 您需要编写javascript代码,而不是电子表格函数。这是一个不同的技能组合。
  • 如果您使用ScriptDb来提高性能,则需要包含一些维护功能;至少,你需要第一次加载数据库。

答案 1 :(得分:1)

您可以尝试不同的公式。例如,在this example spreadsheet中,我在Sheet1中添加了10,000行虚假数据。我已经在Sheet2!A1的单元格中加入第一个名称列和第二个名称列,如下所示:

=arrayformula(join(";", Sheet1!B:B & " " & Sheet1!C:C))

然后我可以在这个长字符串中执行新名称的文本搜索。例如以下内容:

=find("Peter Piper"&";", Sheet2!A1)

速度很快。