当前位置: 首页 > 面试题库 >

Google App Script中的类似SQL的查询功能可从Google表格中提取数据

司徒经纶
2023-03-14
问题内容

我正在尝试构建一个Google Apps脚本网络应用程序,该应用程序将从Google表格中提取数据并在浏览器的HTML页面中以行和列显示它们。

通过遵循示例等,我编写了此代码!

function doGet(){
return HtmlService
       .createTemplateFromFile('Report3')
       .evaluate();
}

function getData(){

var spreadsheetId = '1Z6G2PTJviFKbXg9lWfesFUrvc3NSIAC7jGvhKiDGdcY';
var rangeName = 'Payments!A:D';

var values = Sheets
             .Spreadsheets
             .Values
             .get(spreadsheetId,rangeName)
             .values;
return values;

}

通过以下HTML模板提取位于A,B,C,D列中的数据并正确显示它们

<? var data = getData(); ?>
    <table>
      <? for (var i = 0; i < data.length; i++) { ?>
        <tr>
          <? for (var j = 0; j < data[i].length; j++) { ?>
            <td><?= data[i][j] ?></td>
          <? } ?>
        </tr>
      <? } ?>
    </table>

与其从A,B,C,DI获取所有行和所有列,不如运行SQL查询以使用WHERE子句(如SQL)检索某些列。我了解在电子表格中起作用的=
QUERY()函数在GAS内部不起作用。所以我的下一个尝试是通过使用getBatch方法来检索某些行..这就是我得到错误的地方

在这种情况下,我想排除C列,仅获取A,B和D,E引发错误的代码如下:

function getData2(){

var spreadsheetId = '1Z6G2PTJviFKbXg9lWfesFUrvc3NSIAC7jGvhKiDGdcY';

/* var rangeName1 = 'Payments!D'; */
/* var rangeName2 = 'Payments!A'; */
var values = Sheets
             .Spreadsheets
             .Values
             .batchGet(spreadsheetId,{ranges: ['Payments!D:E', 'Payments!A:B']})
             .values;
return values;

}

在相应的HTML模板中,所有更改是将getData替换为getData2

<? var data = getData2(); ?>

与此代码,我得到以下错误:

TypeError:无法从未定义中读取属性“ length”。(第6行,文件“代码”,项目“ Report003”)

现在我有两个问题:

  1. 我的代码有什么问题,我该如何解决?
  2. 是否可以使用SQLite简化提取所需行和列的过程

问题答案:

您可以使用Google Visualization
API查询语言
对查询到数据源的数据进行操作。查询语言的语法类似于SQL

代码

function doGet() {
 // SpreadsheetApp.openById("SSID"); // To define the oAUTH Scope - https://www.googleapis.com/auth/spreadsheets
 var output = HtmlService.createTemplateFromFile('index');
  output.token = ScriptApp.getOAuthToken();
  return output
        .evaluate()
        .setTitle('SQL Query');
}

index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>

    <div id="dataTable"><h4>Loading...</h4></div>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> 
    <script src="https://www.gstatic.com/charts/loader.js"></script>
    <script>

    google.load('visualization', '1.0', {packages: ['corechart','table']});
    google.setOnLoadCallback(loadEditor);

      function loadEditor() {
        var queryString = encodeURIComponent("SELECT A,B,D,E where A!= 'JACK'");
        var SSID = "ADD YOUR SPREADSHEET"
        var SHEET_NAME = "SHEET NAME"
        var query = new google.visualization.Query('https://spreadsheets.google.com/tq?key='+SSID+'&sheet='+SHEET_NAME+'&oauth_token=<?=ScriptApp.getOAuthToken()?>&headers=1&tq=' + queryString);
        query.send(handleSampleDataQueryResponse);
      }

      function handleSampleDataQueryResponse(response) {
        console.log(response)
        var data = response.getDataTable();
        console.log(data);
        var chartTbl = new google.visualization.Table(document.getElementById('dataTable'));
        chartTbl.draw(data);
      }

    </script>
  </body>
</html>


 类似资料:
  • 问题内容: 我有一个看起来像这样的数组: 我正在查询一些这样的数据: 我尝试了这个: 但是它返回了一个错误消息,它是无效的数据类型,无论如何都说类似这样的内容: 或类似的东西。 请注意,这是一个数组比较,而不是查询对象中的文本。 问题答案: 这是我最终的做法: 使用foreach命令,您可以轻松地处理数据,然后将其推入数组以重新创建数据集合,但是您需要它。

  • 我想这样写一个hql 因为我是新手,请帮帮我

  • 问题内容: 我有一张 表 数据喜欢 现在我想按数量对表进行排序,但是一个问题是数量是varchar,所以它像这样对表进行排序 但我想要这样的结果 我该怎么办 ? 问题答案: 选择以下内容时,将金额列转换为“数值输入”子句: 结果: ID 数量 3 10000 2个 4568 1个 2340 看到这个SQLFiddle

  • 我正在尝试使用JPA查询使用以下查询从DB中获取数据: 其中,id=candidate_id(主表的主键)。 该查询也从其所有关联表中获取数据,而我的要求是仅从其2个关联表中获取数据。因为第三个表包含大量JSON数据,这会降低上述查询的响应时间。 我尝试使用JOIN,获取父级的JOIN及其2个关联表,但它不起作用。我还在研究如何在获取候选数据时只跳过一列数据(带有大量JSON的第3个表的列),但运

  • 问题陈述: 我有一个PDF的结构像表格,但行是不可见的。请参阅下面的示例: 上图是我的表格在其中一个PDF页面中的样子。 我的研究 > 如何使用Python从PDF中提取表作为文本?--看了这道题,看了所有的答案。没有帮助 tabula:尝试了tabula API,但它只是提取标题而不是文本,可能是因为没有行。 我可以将整个pdf转换成文本,然后尝试用regex或数据操作来提取它。但这可能是非常乏

  • 问题内容: 我想找到多列的最大值。 MySQL支持该GREATEST功能,但SQL Server不支持。 SQL Server 2008中是否有与此相似的功能? 问题答案: 否。但是子查询可以访问外部查询中的列,因此您可以添加一个子查询UNION ALL,将感兴趣的列作为派生表,然后从中进行选择max。 或像您在2008年时一样简洁的版本。