查询以Google应用脚本的形式获取工作表数据

时间:2019-12-10 06:15:00

标签: google-apps-script

我添加了一张小桌子

enter image description here

要调用此工作表中的信息,我是这样操作的:

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。是否有任何方法可以将其与数据收集结合起来,而无需创建另一个工作表?

1 个答案:

答案 0 :(得分:0)

  • 您要使用=QUERY(lista_sites!A:C,"select A, C where B >= 18")检索值。
  • 在这种情况下,您要检索值而不插入新表。
  • 您想使用Google Apps脚本实现这一目标。

如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。

在此答案中,直接使用查询语言检索值。

示例脚本:

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)
  • 在这种情况下,值以CSV格式返回。因此,将解析CSV数据。这样,values是二维数组。

参考文献:

如果我误解了您的问题,而这不是您想要的方向,我深表歉意。

相关问题