我有一个功能正常的谷歌网络应用程序,与[此处]提供的应用程序相同
你会在code.gs中注意到SpreadsheetApp.openByID ...... getRange()。getValues()用于检索稍后在Dashboard-JavaScript.html中转换为DataTable的数组
Working Code.gs:
function doGet(e) {
var template = HtmlService.createTemplateFromFile('Index');
// Build and return HTML in IFRAME sandbox mode.
return template.evaluate()
.setTitle('Dashboard demo')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
/**
* Return all data from first spreadsheet as an array. Can be used
* via google.script.run to get data without requiring publication
* of spreadsheet.
* Returns null if spreadsheet does not contain more than one row.
*/
function getSpreadsheetData() {
var sheetId = '-key-';
var data = SpreadsheetApp.openById(sheetId).getSheets()[0].getRange("A1:D8").getValues();
return (data.length > 1) ? data : null;
}
我想使用google.visualization.query而不是.getRange。
不起作用 - 目前返回“Google”未定义
function doGet(e) {
var template = HtmlService.createTemplateFromFile('Index');
// Build and return HTML in IFRAME sandbox mode.
return template.evaluate()
.setTitle('Dashboard demo')
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
function getSpreadsheetData() {
var opts = {sendMethod: 'auto'};
var sheetId = '-key-';
var query = new google.visualization.Query('http://spreadsheets.google.com?key=' + sheetId, opts);
query.setQuery('select A, B, C, D');
query.send(draw)
}
function draw(response) {
if (response.isError()) {
alert('Error in query');
}
alert('No error')
}
我确定有几个问题 - 但我无法获得任何有用的错误来调试问题。
我的问题是:
最后 - 如果任何格式不正确或不清楚,我道歉。这是我在此的头一篇博文。此外,我在javascript / apps脚本和谷歌网络应用程序方面经验有限,专业知识较少。
答案 0 :(得分:0)
不,它无法在服务器端完成,因为google
是客户端API。
与google.script.run
相同的原因。 (为了更好地理解,您可以自己检查整个代码,它位于here,需要嵌入<script>
标记的代码,Html
侧。)
作为服务器端的替代方案,您应该能够使用URLFetchApp。
要撰写的网址应如下所示:
var BASE_URL = "https://docs.google.com/a/google.com/spreadsheets/d/";
var SS_KEY = "stringSS_Key";
var BASE_QUERY = "/gviz/tq?tq=";
var partialUrl = BASE_URL + SS_KEY + BASE_QUERY;
var queryToRun = 'select dept, sum(salary) group by dept';
var finalUrl = partialUrl + encodeURIComponent(queryToRun);
并在其上拨打URLFetchApp.fetch
。