当前位置: 首页 > 知识库问答 >
问题:

谷歌脚本优化

仲孙兴旺
2023-03-14

我有一张保存ID的表。现在,我偶尔需要读取这些ID,并检查表中的其他值(名称)是否仍然符合ID。我的代码是:

var name = sheet.getRange(line,row).getValue();
  var id = sheet.getRange(line,10).getValue();
  if(name!== "" && id === "")
  {   
    try
    { get an ID}

从我所读到的,我知道单独调用每个单元格值需要更多的时间。然而,我不知道如何应用getValue来修复这些情况。基本上相同的问题在不同的衣服我有以下代码:

  var id = sheet.getRange(line,row).getValue();    
    if(id!== "" && id!="Not Found" && id!="Not Found old")
    {      
      var url = "some api url "+id+"api key";
      try
      {
        var str = UrlFetchApp.fetch(url).getContentText();

那么我如何使用get值来检查我得到的每个ID呢。我想我得用一些

foreach(id) 

或者

for(i= 0; i <= id.range; i++)
{
use id[i] to blablabal
}
  • 但我不知道如何实施,有什么想法吗?
  • 有没有其他更有效的方法

共有1个答案

詹亮
2023-03-14

调用getValue后,会得到一个双数组,如[[value A1, value B1],[value A2, value B2]]。在for循环中处理它,如果涉及所有行/列组合,则可能是双循环。请记住,电子表格使用1基索引,但在JavaScript中,它们是基于0的。通常,最上面的一行是标题,所以下面的循环中省略了它。

function processData() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getDataRange();            // all of data. could be some part of it
  var values = range.getValues();
  for (var i = 1; i < values.length; i++) {    // skipping with header row
    for (var j = 0; j < values[0].length; j++) {
      if (condition) {
        // do something to values[i][j];
      }
    }
  }
  range.setValues(values);    // put updated values back
}

如果感兴趣的数据位于(比如)列D中,那么您可以决定只获取该列。例如:

function fetchStuff() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow(); 
  var range = sheet.getRange(1, 4, lastRow, 1);  // all of column D, note 1-based indexing
  var values = range.getValues();
  for (var i = 1; i < values.length; i++) {    //  skipping header row
    if (condition) {
      var str = UrlFetchApp.fetch(values[i][0]).getContentText();
      // do something
    }
  }
}

请记住,fetch是到目前为止最慢的操作,并且受配额限制。使用Utilities.sleep(ms)避免过于频繁地调用服务,并跟踪您请求脚本获取的数据量。

 类似资料:
  • 我发现CacheService非常快(duh),所以决定创建一个CacheManager来存储所有内容。 JS对象 如果 base64 字符串是 我能够以这种方式在~1.2秒内存储/调用~3MB的原始JSON数据(速度类似于DriveApp API调用) 我尝试搜索可以创建的总缓存对象数的总体限制,但没有找到太多。有没有人知道大量缓存字符串的总体限制或性能下降? 我的“缓存管理器”的源代码 编辑:

  • 在继续使用GoogleApps脚本构建Google电子表格的过程中,我已经完成了获取Bittrex和Poloniex余额的工作,但无法使用Cryptopia。 下面是我与Bittrex将JSON对象数组映射到字符串的斗争的链接 以下是官方API链接:https://www.cryptopia.co.nz/Forum/Thread/256 以下是一些例子: https://www.cryptopia

  • 我正在尝试使用Google驱动器列出文件。 使用中的答案https://stackoverflow.com/a/11280257我发现了一个无法找到原因的问题。 我有这个错误: 在行中

  • 谢谢大家。 我有一个包含7张的谷歌电子表格。我试图将最后一张工作表中的数据从单元格A1: D1移动到附加到同一工作表底部的新行。 下面是我正在使用的代码片段: 在我运行代码后,在标签“薪资检查历史记录”中,在工作表底部的新行中,我得到以下内容:“[Ljava.lang.对象;@3e0d05f9” 有人能告诉我(a)这个错误是什么,(b)这意味着什么,以及(c)我如何修复这个问题或实现我的目标,即“

  • 我希望每天凌晨1点从外部来源将一些数据输入到谷歌的工作表中。进口产品的数量将有所不同。 然后,我希望在数据上传完成后,按价格对数据进行排序,这将是凌晨1:05左右。 我看到它是可能的运行功能为谷歌工作表在一个时间的基础上。 我需要什么样的脚本来按价格对数据进行排序,所以最便宜的项目是每天早上运行脚本后的第2行。 要在Google Sheets中手动执行此操作,我会这样做-*突出显示第2行到数据,排

  • 我试图使用一个谷歌脚本,从检索2个证券字段,并将输出保存到Google Sheet文件。我还需要脚本将datetime添加到工作表的第一列。 我创建了一个包含3列的基本Google工作表: A的格式为DateTime。第1行中有列名称date,第2行之后为空 以下是我的功能: 以下是输出: C和D列的输出正确。A列输出错误。每次我运行该函数时,每一行都会在最后一行的上方添加: 我第一次运行该函数是