如何加快表格中搜索数据的速度

IT技术 javascript google-apps-script google-sheets
2021-03-22 09:09:42

我有超过 1000000 条记录如何加快工作表中的搜索速度。我一般搜索20s怎么提高?(工作表包括 20 列和 10000 条记录)

var ss =  SpreadsheetApp.openByUrl(urldb);
var ws =  ss.getSheetByName("Account");
var data = ws.getDataRange().getValues();

for(var i = 0; i < data .length; i++){

    if(data [i][1] == "ID998724"){

      Logger.log("found you" + data [i][1]);

    }
};

return data[i][1];
1个回答
  • 您想ID998724使用 Google Apps 脚本搜索电子表格中“帐户”工作表上“B”列的值

如果我的理解是正确的,这 3 个示例脚本怎么样?请将此视为几个答案之一。

示例脚本 1:

在这个脚本中,我在这种情况下使用了 Class TextFinder。这是在最近的 Google 更新中添加的。

var urldb = "###"; // Please set this.
var searchValue = "ID998724";

var ss = SpreadsheetApp.openByUrl(urldb);
var ws = ss.getSheetByName("Account");
var f = ws.createTextFinder(searchValue).findAll();
if (f.length > 0) {
  for (var i = 0; i < f.length; i++) {
    if (f[i].getColumn() == 2) {
      Logger.log("found you" + f[i].getValue())
    }
  }
}

示例脚本 2:

在此脚本中,从“B”列中检索值。罗斯的评论中也提到了这一点而且从基准测试的结果来看,我用于filter()这种情况。

var urldb = "###"; // Please set this.
var searchValue = "ID998724";

var ss = SpreadsheetApp.openByUrl(urldb);
var ws = ss.getSheetByName("Account");
var data = ws.getRange(1, 2, ws.getLastRow(), 1).getValues();
var f = data.filter(function(e) {return e[0] == searchValue});
if (f.length > 0) {
  for (var i = 0; i < f.length; i++) {
    Logger.log("found you" + f[i])
  }
}

示例脚本 3:

在这个脚本中,我在这种情况下使用了查询语言。

var urldb = "###"; // Please set this.
var searchValue = "ID998724";

var ss = SpreadsheetApp.openByUrl(urldb);
var ws = ss.getSheetByName("Account");
var query = "select * where B='" + searchValue + "'";
var url = "https://docs.google.com/spreadsheets/d/" + ss.getId() + "/gviz/tq?gid=" + ws.getSheetId() + "&tqx=out:csv&tq=" + encodeURIComponent(query);
var options = {headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()}};
var csv = UrlFetchApp.fetch(url, options);
var f = Utilities.parseCsv(csv);
if (f.length > 0) {
  for (var i = 0; i < f.length; i++) {
    Logger.log("found you" + f[i][1])
  }
}

笔记:

  • 在您的脚本中,我认为在return data[i][1]. 因为idata.length. return data[i][1]例如,如果您想通过 检索值,请放在break之后Logger.log("found you" + data [i][1])

参考:

如果我误解了您的问题并且这些示例脚本不是您想要的结果,我深表歉意。

@loc dinh 如果您使用csvvar csv = UrlFetchApp.fetch(url, options)示例 3,则of是包括具有searchValue. 所以当你想要包含的行时searchValue,请修改Logger.log("found you" + f[i][1])Logger.log("found you" + f[i]). 通过这个,你可以看到行列表。我对你的回复的理解正确吗?
2021-04-21 09:09:42
我将 Logger.log("found you" + f[i][1]) 更改为 Logger.log("found you" + f[i]) 它运行良好但长度为 26 --> 我认为这是26 列,但我的工作表有 5 列。我还有更多问题,如果我们解析为 csv,那么在 csv 中查找 id 会更快吗?为什么解析为 csv
2021-04-28 09:09:42
您可以向我解释更多示例脚本 3 吗?我不明白 (" var options = {headers: {'Authorization': 'Bearer' + ScriptApp.getOAuthToken()}}; var csv = UrlFetchApp.fetch(url, options); var f = Utilities.parseCsv(csv ); “) 该怎么办 ???
2021-05-02 09:09:42
@loc dinh 感谢您的回复。1.var options = {headers: {'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()}}用于UrlFetchApp. 此方法需要使用访问令牌。2.var csv = UrlFetchApp.fetch(url, options); var f = Utilities.parseCsv(csv)用于解析从 UrlFetchApp 检索到的值。Ref因为结果是作为 CSV 数据返回的。
2021-05-02 09:09:42
@Tannaike 非常感谢你。但是我有一个问题,我找到了 ID,但是我如何才能记录它(行数据)。因为加速搜索 ID 最终是为了获取数据吧。以你的方式只得到ID
2021-05-17 09:09:42