Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google应用程序脚本中类似SQL的查询功能,用于从Google工作表中提取数据_Sql_Sqlite_Google Apps Script_Google Sheets Api - Fatal编程技术网

Google应用程序脚本中类似SQL的查询功能,用于从Google工作表中提取数据

Google应用程序脚本中类似SQL的查询功能,用于从Google工作表中提取数据,sql,sqlite,google-apps-script,google-sheets-api,Sql,Sqlite,Google Apps Script,Google Sheets Api,我正在尝试构建一个GoogleApps脚本web应用程序,它将从Google工作表中提取数据,并在浏览器的HTML页面中以行和列的形式显示数据 通过遵循示例等,我编写了这段代码 function doGet(){ return HtmlService .createTemplateFromFile('Report3') .evaluate(); } function getData(){ var spreadsheetId = '1Z6G2PTJviFKbXg9l

我正在尝试构建一个GoogleApps脚本web应用程序,它将从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;

}
列A、B、C、D中的数据通过下面的HTML模板被提取并正确显示

<? 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>
在相应的HTML模板中,所有更改都是getData,并将其替换为getData2

<? var data = getData2(); ?>

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

TypeError:无法从undefined中读取属性“length”。(第6行,文件 “代码”,项目“报告003”)

现在我有两个问题:

  • 我的代码中有什么错误,如何修复
  • 是否可以使用SQLite简化提取所需行和列的过程
  • 我已经看到了这一点,但我无法充分理解答案

    您可以使用对数据源的查询执行数据操作。查询语言的语法类似于SQL

    代码.gs

    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>
    
    
    加载。。。
    load('visualization','1.0',{packages:['corechart','table']});
    setOnLoadCallback(loadEditor);
    函数loadEditor(){
    var queryString=encodeURIComponent(“选择A、B、D、E,其中A!=“JACK”);
    var SSID=“添加电子表格”
    var SHEET_NAME=“SHEET NAME”
    var query=new google.visualization.query('https://spreadsheets.google.com/tq?key=“+SSID+”&sheet='+sheet_NAME+”&oauth_token=&headers=1&tq='+queryString);
    发送(handleSampleDataQueryResponse);
    }
    函数handleSampleDataQueryResponse(响应){
    console.log(响应)
    var data=response.getDataTable();
    控制台日志(数据);
    var chartTbl=new google.visualization.Table(document.getElementById('dataTable');
    图表绘制(数据);
    }
    
    您可以使用对数据源的查询执行数据操作。查询语言的语法类似于SQL

    代码.gs

    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>
    
    
    加载。。。
    load('visualization','1.0',{packages:['corechart','table']});
    setOnLoadCallback(loadEditor);
    函数loadEditor(){
    var queryString=encodeURIComponent(“选择A、B、D、E,其中A!=“JACK”);
    var SSID=“添加电子表格”
    var SHEET_NAME=“SHEET NAME”
    var query=new google.visualization.query('https://spreadsheets.google.com/tq?key=“+SSID+”&sheet='+sheet_NAME+”&oauth_token=&headers=1&tq='+queryString);
    发送(handleSampleDataQueryResponse);
    }
    函数handleSampleDataQueryResponse(响应){
    console.log(响应)
    var data=response.getDataTable();
    控制台日志(数据);
    var chartTbl=new google.visualization.Table(document.getElementById('dataTable');
    图表绘制(数据);
    }
    
    我终于明白了是什么,并按如下所示对其进行了修改。现在我们可以使用QUERY()函数支持的任何SQL

    function mostSQL(){
    
    var spreadsheetId = '1Z6G2PTJviFKbXg9lWfesFUrvc3NSIAC7jGvhKiDGdcY';
    var targetRange = 'Payments!A:G';
    var SQL = 'select A, G where G >= 700 and G <= 800'
    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();
    
    currentDoc.deleteSheet(tempSheet); 
    
    return pullResult;
    
    }
    
    函数mostSQL(){
    var电子表格ID='1Z6G2PTJVIFKBXG9LWFESFURVC3NSIAC7JGVHKIDCY';
    var targetRange='Payments!A:G';
    var SQL='选择A,G,其中G>=700和G我最终理解了是什么,并按如下所示对其进行了修改。现在我们可以使用QUERY()函数支持的任何SQL

    function mostSQL(){
    
    var spreadsheetId = '1Z6G2PTJviFKbXg9lWfesFUrvc3NSIAC7jGvhKiDGdcY';
    var targetRange = 'Payments!A:G';
    var SQL = 'select A, G where G >= 700 and G <= 800'
    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();
    
    currentDoc.deleteSheet(tempSheet); 
    
    return pullResult;
    
    }
    
    函数mostSQL(){
    var电子表格ID='1Z6G2PTJVIFKBXG9LWFESFURVC3NSIAC7JGVHKIDCY';
    var targetRange='Payments!A:G';
    
    var SQL='选择A,G其中G>=700和G我相信这会起作用,但我找到了下面给出的另一种更简单的方法。我使用了这两种方法,一种是在这个答案中描述的,另一种是在下面给出的。这个答案中描述的更好。我相信这会起作用,但我找到了另一种更简单的方法,即下面给出。我使用了两种方法,一种是在这个答案中描述的,另一种是我在下面给出的。这个答案中描述的方法更好。