用于在大列表中查找和更新数据的Google表格脚本非常慢

布伦丹·吉尔胡利(Brendan Gilhuly)

希望有人可以让我走上正确的道路。(我认为这归结于我不了解如何使用客户端数组?)。

我拼凑的脚本会在客户端列表中查找匹配的名称,然后根据我在另一个选项卡上输入的数据来更新一堆列。最后,我希望能够完全从另一张纸上完成此操作,但是现在需要3-4分钟才能遍历整个列表。我怀疑我需要做的是获取整个数据集,对其进行修改,然后设置新值,但是我不确定我是否正确理解了这个问题。

function UpdateEntry() {
    var client_name=SpreadsheetApp.getActive().getSheetByName("Rolodex!C2").getValue()
    var addr=SpreadsheetApp.getActive().getSheetByName("Rolodex!C4").getValue()
    var client_phone=SpreadsheetApp.getActive().getRange("Rolodex!E4").getValue()
    var client_fax=SpreadsheetApp.getActive().getRange("Rolodex!E6").getValue()
    var client_WWW=SpreadsheetApp.getActive().getRange("Rolodex!E7").getValue()
      
    var data=SpreadsheetApp.getActive().getSheetByName("Rolodex").getRange("C4").getValue()
    var key=SpreadsheetApp.getActive().getSheetByName("Rolodex").getRange("C2").getValue()

    var database=SpreadsheetApp.getActive().getSheetByName("Database")
    var datalength=database.getDataRange().getValues().length
  
    database.getDataRange().getValues()
  
    for (var i = 1;[i]<=datalength ; i++){
        Logger.log('i: ' + i)
        if(database.getRange([i],[1]).getValue() == client_name){
            database.getRange([i],2).setValue(addr)
            database.getRange([i],3).setValue(client_phone)
            database.getRange([i],4).setValue(client_fax)
            database.getRange([i],5).setValue(client_WWW)
        }
    }
}
Tanaike

相信您目前的情况和目标如下。

  • 您的脚本工作正常。但是过程成本很高。
  • 您想减少脚本的处理成本。

修改要点:

  • getValue()是“类范围”的方法。但在var client_name=SpreadsheetApp.getActive().getSheetByName("Rolodex!C2").getValue()getValue被用作类片材的方法。在这种情况下,我认为脚本的第一行会发生错误。
    • 根据您的问题,我认为getSheetByName可能是getRange
  • SpreadsheetApp.getActive() 可以通过声明一次来使用。
  • 的值client_name,addr,client_phone,client_fax,client_WWW可以由1检索getValues
  • data并且key不使用。
  • 的行database.getDataRange().getValues()未使用。
  • getValuesetValue在循环中使用。
    • 在这种情况下,首先使用来从工作表中检索值getValues并且,创建要放置到图纸上的值,然后使用创建的值放置到图纸上setValues
    • 在此,重要的setValues,在使用时,对于所有列长度,长度必须相同。请注意这一点。

当以上几点反映到您的脚本时,它将变为以下内容。

修改后的脚本:

function UpdateEntry() {
  var ss = SpreadsheetApp.getActive();

  // 1. Retrieve values of client_name, addr, client_phone, client_fax, client_WWW from Rolodex sheet.
  var sheet = ss.getSheetByName("Rolodex");
  var [[client_name],,[addr,,client_phone],,[,,client_fax],[,,client_WWW]] = ss.getRange("Rolodex!C2:E7").getValues();
  var ar = [client_name, addr, client_phone, client_fax, client_WWW];
  var arLength = ar.length;

  // 2. Retrieve values from database sheet.
  var database = ss.getSheetByName("Database");
  var values = database.getDataRange().getValues();
  var columnLength = values[0].length;

  // 3. Create values for putting to Database sheet using the values retrieved from Rolodex sheet.
  var res;
  if (columnLength > arLength) {
    res = values.map(r => r[0] == client_name ? ar.concat(r.slice(arLength)) : r);
  } else {
    res = values.map(r => r[0] == client_name ? ar : r.concat(Array(arLength - columnLength).fill("")));
  }
  
  // 4. Put the values to Database sheet.
  database.getRange(1, 1, res.length, res[0].length).setValues(res);
}

注意:

  • 使用此修改后的脚本时,请在脚本编辑器中启用V8运行时。

  • 如果上面修改的脚本不是您期望的结果,则当前脚本可能不是您期望的结果。如果我的理解是正确的,您能否提供所需的样本输入和输出?由此,我想确认一下。

参考文献:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

UserInput Google脚本非常慢

来自分类Dev

在电子表格上迭代的Google Apps脚本非常慢

来自分类Dev

谷歌应用程序脚本非常非常慢

来自分类Dev

用于Google表格中多个查找和替换的Google Apps脚本

来自分类Dev

在R中解析150KB文本非常慢

来自分类Dev

如何提高这种非常慢的Shell脚本用于不确定性列表数据?

来自分类Dev

用于在Google表格中添加数据范围的脚本

来自分类Dev

Google表格脚本查找和替换功能

来自分类Dev

查找和替换列中的数据-Google表格

来自分类Dev

搜索和更新数据库操作非常慢

来自分类Dev

在单元格中查找文本并将其替换为Google脚本和Google表格

来自分类Dev

Google Spreadsheet批量更新非常慢

来自分类Dev

如何从Google表格中的表格中获取数据列表?

来自分类Dev

用于在列表中查找最低坐标的 Python 脚本

来自分类Dev

Google Apps脚本-如何将此代码应用于Google表格中的多个表格

来自分类Dev

用于在C ++中存储非常大的2D数据的数据结构

来自分类Dev

用于从多个不同电子表格中编译数据的 Google 脚本,这些电子表格是同一文件的副本

来自分类Dev

ReactJS。渲染和更新1500个<li>元素的简单列表时,速度非常慢。我以为VirtualDOM很快

来自分类Dev

Google表格+ Apps脚本:仅当表格中的列包含getElementById('item1')中的匹配词时,才创建数据列表

来自分类Dev

在巨大的目录中查找文件-非常慢

来自分类Dev

脚本组件中具有自定义加密dll的SSIS数据流非常慢

来自分类Dev

DNS查找速度非常慢

来自分类Dev

用于更新多个Google表格过滤器视图范围的脚本

来自分类Dev

复制输入数据并将其粘贴到电子表格中时,使用什么触发器来更新单元格?(Google表格/应用脚本)

来自分类Dev

如何从列表中的表格行中一起获取表格标题和表格数据?

来自分类Dev

搜索值,然后在Google表格中查找并使用Google Apps脚本以html显示行值

来自分类Dev

在Google表格中复制无效表格的脚本

来自分类Dev

当值为 Treemap 且 treemap 中的数据增加到 10K 时,Ignite 缓存调用更新非常慢

来自分类Dev

在字典列表中查找和更新字典的值

Related 相关文章

  1. 1

    UserInput Google脚本非常慢

  2. 2

    在电子表格上迭代的Google Apps脚本非常慢

  3. 3

    谷歌应用程序脚本非常非常慢

  4. 4

    用于Google表格中多个查找和替换的Google Apps脚本

  5. 5

    在R中解析150KB文本非常慢

  6. 6

    如何提高这种非常慢的Shell脚本用于不确定性列表数据?

  7. 7

    用于在Google表格中添加数据范围的脚本

  8. 8

    Google表格脚本查找和替换功能

  9. 9

    查找和替换列中的数据-Google表格

  10. 10

    搜索和更新数据库操作非常慢

  11. 11

    在单元格中查找文本并将其替换为Google脚本和Google表格

  12. 12

    Google Spreadsheet批量更新非常慢

  13. 13

    如何从Google表格中的表格中获取数据列表?

  14. 14

    用于在列表中查找最低坐标的 Python 脚本

  15. 15

    Google Apps脚本-如何将此代码应用于Google表格中的多个表格

  16. 16

    用于在C ++中存储非常大的2D数据的数据结构

  17. 17

    用于从多个不同电子表格中编译数据的 Google 脚本,这些电子表格是同一文件的副本

  18. 18

    ReactJS。渲染和更新1500个<li>元素的简单列表时,速度非常慢。我以为VirtualDOM很快

  19. 19

    Google表格+ Apps脚本:仅当表格中的列包含getElementById('item1')中的匹配词时,才创建数据列表

  20. 20

    在巨大的目录中查找文件-非常慢

  21. 21

    脚本组件中具有自定义加密dll的SSIS数据流非常慢

  22. 22

    DNS查找速度非常慢

  23. 23

    用于更新多个Google表格过滤器视图范围的脚本

  24. 24

    复制输入数据并将其粘贴到电子表格中时,使用什么触发器来更新单元格?(Google表格/应用脚本)

  25. 25

    如何从列表中的表格行中一起获取表格标题和表格数据?

  26. 26

    搜索值,然后在Google表格中查找并使用Google Apps脚本以html显示行值

  27. 27

    在Google表格中复制无效表格的脚本

  28. 28

    当值为 Treemap 且 treemap 中的数据增加到 10K 时,Ignite 缓存调用更新非常慢

  29. 29

    在字典列表中查找和更新字典的值

热门标签

归档