搜索速度慢,接缝重-Google表格查询。加快缓存服务的速度? [关闭]

问题描述 投票:0回答:1

在同一电子表格中,我有2张纸(2020年和数据库)。

在工作表“ 2020”中,我有2列ID和EMAIL。

在“数据库”工作表中,我有很大的数据范围(22列和12400行),但是我仅使用3列来通过ID获取EMAIL。 (而且速度很慢!)。

在“ 2020”中,当我在ID列中输入值时,将在工作表“数据库”上进行查询以填充EMAIL列。

我的问题是此查询太慢。我读了一些有关“缓存服务”的信息,我认为这是加快查询速度的一种方法,但是我不明白**如何缓存整个工作表以及如何在此缓存的数据中进行查询。

[EMAIL列的第一个单元格(标题上方)的值:

    =query(DATABASE!G$2:H;"select G where H = '"&A2&"'");)

2020!A2 = ID号

DATABASE!H =数据库的ID列

DATABASE!G =数据库的EMAILs列

google-apps-script google-sheets google-sheets-query
1个回答
0
投票

通过ID获取电子邮件

也许您可以做这样的事情:

此函数返回一个字符串化的JSON对象,该对象保存在缓存中,并且可以通过知道ID来检索电子邮件。我使用了一个对话框来显示数据,您可以将其修改为所需的任何内容。

如果它们不完全是“ ID”和“ EMAIL”,则需要更新工作表名称并更改标题名称。

function getEmailObj() {
  var cache = CacheService.getScriptCache();
  var cached = cache.get("emails");
  if (cached != null) {
    return cached;
  }
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var hA=vA.shift();
  var idx={};//associates header name with data array index
  hA.forEach(function(hdr,i){idx[hdr]=i;});
  var getEmailById={idA:[]};//associates email address with ID
  vA.forEach(function(r,i){
    getEmailById[r[idx['ID']]]=r[idx['EMAIL']];
    getEmailById.idA.push(r[idx['ID']]);
  });
  var results=JSON.stringify(getEmailById);//return JSON string
  cache.put("emails",results, 60); // cache for 1 minute Save JSON string
  return results;
}

function getEmailsById() {
  var eObj=JSON.parse(getEmailObj());//parse JSON string to get object
  var html='<style>th,td{border:1px solid black;padding:2px 5px;}</style><table><tr><th>ID</th><th>Email</th></tr>';
  eObj.idA.forEach(function(id){
    html+=Utilities.formatString('<tr><td>%s</td><td>%s</td></tr>',id,eObj[id]);
  });
  html+='</table>';
  var userInterface=HtmlService.createHtmlOutput(html);
  SpreadsheetApp.getUi().showModelessDialog(userInterface, "Emails")
}
© www.soinside.com 2019 - 2024. All rights reserved.