Google应用程序脚本中类似SQL的查询功能,用于从Google工作表中提取数据
我正在尝试构建一个GoogleApps脚本web应用程序,它将从Google工作表中提取数据,并在浏览器的HTML页面中以行和列的形式显示数据 通过遵循示例等,我编写了这段代码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
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”)
现在我有两个问题:
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我相信这会起作用,但我找到了下面给出的另一种更简单的方法。我使用了这两种方法,一种是在这个答案中描述的,另一种是在下面给出的。这个答案中描述的更好。我相信这会起作用,但我找到了另一种更简单的方法,即下面给出。我使用了两种方法,一种是在这个答案中描述的,另一种是我在下面给出的。这个答案中描述的方法更好。