Как ускорить поиск данных в листе - PullRequest
0 голосов
/ 19 июня 2019

У меня более 1000000 записей о том, как ускорить поиск по листу.Я обычно ищу 20-е, как улучшить?(лист включает 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 Ответ

5 голосов
/ 19 июня 2019
  • Требуется выполнить поиск значения ID998724 в столбце «B» на листе «Учетная запись» в электронной таблице с использованием скрипта Google Apps.

Если мое понимание верно, как насчет этих 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:

В этом сценарии я использовал Query Language для этой ситуации.

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]. Потому что i то же самое с data.length. Если вы хотите получить значение, например, return data[i][1], пожалуйста, поставьте break после Logger.log("found you" + data [i][1]).

Ссылки:

Если я неправильно понял ваш вопрос, и эти примеры сценариев не дали желаемых результатов, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...