我添加了一张小桌子
要调用此工作表中的信息,我是这样操作的:
var hojaCalculo = SpreadsheetApp.openById("1d3UuYJyHhsgfsdgshfghumtP4BX5bee2M");
var hojaDatos = hojaCalculo.getSheetByName("lista_sites");
var numColumns = hojaDatos.getLastColumn();
var ultimaFila = hojaDatos.getLastRow();
var row = hojaDatos.getRange(1, 1, ultimaFila, numColumns).getValues();
for (var i = 1; i < row.length; i++) {
//the content and conditionals
var id_site =row[i][0].toString();
}
由于我的记录很少,因此根据我设置的条件,可以快速搜索所需的内容。但实际上我的列表中有3000多个记录,然后搜索很慢,因为它会遍历每个记录。
您可以像在数据库中创建表一样进行查询,如下所示:
select * from table where nro_incidencias>18
这样可以避免浏览所有记录
我找到了以下代码:
var spreadsheetId = '1d3UuYJyHhsgfsdgshfghumtP4BX5bee2M';
var targetRange = 'lista_sites!A:C';
var SQL = 'select A, C where B >= 18'
var Query = '=QUERY('+targetRange+',\"'+SQL+'\")'
var currentDoc = SpreadsheetApp.openById(spreadsheetId)
var tempSheet = currentDoc.insertSheet();
var pushQuery = tempSheet.getRange(1, 1).setFormula(Query);
var pullResult = tempSheet.getDataRange().getValues();
for (var i = 1; i < pullResult .length; i++) {
//the content and conditionals
var id_site =pullResult[i][0].toString();
}
如您所见,它会查询list_sites的内容,但是它的工作是在新表中创建它,并在那里可以使用新内容。创建新工作表也会导致延迟,此外查询还会显示为setformula。是否有任何方法可以将其与数据收集结合起来,而无需创建另一个工作表?
答案 0 :(得分:0)
=QUERY(lista_sites!A:C,"select A, C where B >= 18")
检索值。如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。
在此答案中,直接使用查询语言检索值。
var spreadsheetId = '###'; // Please set the spreadsheet ID.
var targetSheet = 'lista_sites'; // Please set the sheet name.
var query = 'select A, C where B >= 18'; // Please set the query for retrieving the values.
var ss = SpreadsheetApp.openById(spreadsheetId);
var sheetId = ss.getSheetByName(targetSheet).getSheetId();
var url = "https://docs.google.com/spreadsheets/d/" + spreadsheetId + "/gviz/tq?gid=" + sheetId + "&tqx=out:csv&tq=" + encodeURIComponent(query);
var res = UrlFetchApp.fetch(url, {headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()}});
var values = Utilities.parseCsv(res.getContentText());
Logger.log(values)
values
是二维数组。如果我误解了您的问题,而这不是您想要的方向,我深表歉意。