Google apps script 谷歌脚本与公式-匹配记录

Google apps script 谷歌脚本与公式-匹配记录,google-apps-script,google-sheets,google-spreadsheet-api,Google Apps Script,Google Sheets,Google Spreadsheet Api,目前我有一份工作表,上面有以前的学生姓名和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") 
但是电子表格变得相当慢

谷歌脚本会更好吗?如果是这样,怎么办

谢谢“更好”?那太主观了。我们只谈表演吧

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

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

  • 理想情况下,表单提交触发函数会响应表单进行查找,并且只针对新的学生数据

  • 脚本可用于存储所有以前的学生姓名和ID,从而消除了反复阅读以前的学生电子表格的需要,并提供快速查找

    ...
    var db = ScriptDb.getMyDb();
    var result = db.query({id: newId});
    if (!result.hasNext()) {
      event.range.offset(0,statusColumn).setValue("NEW STUDENT");
    }
    
反点确实存在,这里只有几个

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

    • 您可以尝试不同的配方。例如,在中,我在Sheet1中添加了10000行伪数据。在Sheet2中,我已将单元格中的“第一个姓名”列与“第二个姓名”列连接起来!A1,如下所示:

      =arrayformula(join(";", Sheet1!B:B & " " & Sheet1!C:C))
      
      然后我可以在这个长字符串中执行新名称的文本搜索。例如:

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

      它很快。

      很酷-如果只有学生ID感兴趣,字符串会更短。提到有总的电子表格大小限制,但不是它们是什么。。。我想知道这个细胞能有多大?(虽然这个解决方案已经超出了最初提到的规模。)我将从阵列开始,然后慢慢地处理scriptdb,因为我的编程技能有限。