Google Apps不允许在HTML中"Active Content",并且UiApp类已贬值



一直在尝试按照这里的指南创建饼图,并从那里开发谷歌应用程序脚本中的一些面板功能。我发现,当您实现脚本函数的调用时(在本例中,它将是drawChart()函数),这被认为是"活动内容",如图所示。我看到了其他不使用HTML的示例,但这些示例似乎都需要使用UiApp类,该类已经贬值。那么,在谷歌应用程序脚本中获得仪表板/图形功能的唯一方法是拥有HTTPS安全证书吗?如果是这样的话,这似乎相当有限。我看到一两篇帖子提到了类似的沮丧情绪,但只得到了一个白色屏幕,我相信这是由于HTTPS的限制。

最初我没有发布代码,因为我觉得这里的问题很清楚。这是我的密码。我还尝试了一个简单的HTML"Hello World"文件,该文件没有任何函数/脚本,并且成功了。这是与我的谷歌表单相关的脚本:

function OpenChart(){
var html = HtmlService.createHtmlOutputFromFile('DummyChart');
SpreadsheetApp.getUi().showModalDialog(html, "Statistics");
}

这是它调用的HTML文件:

<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
//Load charts package and visualization API
google.charts.load('current', {'packages': ['corechart']});
google.charts.setOnLoadCallback(MakeChart);
//Here is the script I think could be causing a problem
function MakeChart() 
{
var ss = SpreadsheetApp.getActive();
var s = ss.getSheets();
var s = sheets[1];
var UI = SpreadsheetApp.getUi();
var response = UI.prompt("Please enter the first cell in the category").getResponseText();
var ir = s.getRange(response);
var n= 0;
var stored = [];
stored.push(["Income Category", "Frequency"]);
while (ir.getValue()!= "") {
n = n +1;
ir = ir.offset(1, 0);
}
//Above we just set n, below we use n to fill our array
ir = ir.offset(-n,0)
for(i =0; i<n;i++) {
stored.push([ir.getValue(),ir.offset(n+2,0).getValue()]);
ir = ir.offset(1, 0);
}
var data = google.visualization.arrayToDataTable([
stored[]]);
/*I tried to also load data here directly as is seen on the pie chart    example I used. This didn't have any affect*/

var options = { 'chartArea:backgroundColor': "Azure",
'is3D': true,
'title': 'Test Chart'};
//Now instantiate it
var chart = new     google.visualization.PieChart(document.getElementById('chartDiv'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id="chartDiv" style="width: 450px; height: 300px;"> </div>
</body>
</html>

感谢您的帮助。

下面是一个如何工作的快速示例。我坚持使用基本示例,并将饼图示例中的值添加到电子表格中。客户端需要调用服务器端来获取数据。使用google.script.run完成。您可以修改getData()来满足您的需求。

code.gs:

function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu("charts").addItem("piechart", "openPieChart").addToUi()
}

function openPieChart(){
var html = HtmlService.createHtmlOutputFromFile("piechart");
var ui = SpreadsheetApp.getUi();
ui.showModalDialog(html, "piechart")
}
function getData(){      
return SpreadsheetApp.getActiveSheet().getDataRange().getValues()
}  

piechart.html

<html>
<head>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(function(){google.script.run.withSuccessHandler(drawChart).getData()});
function drawChart(values) {
var data = google.visualization.arrayToDataTable(values);
var options = {
title: 'My Daily Activities'
};
var chart = new google.visualization.PieChart(document.getElementById('piechart'));
chart.draw(data, options);
}
</script>
</head>
<body>
<div id="piechart" style="width: 900px; height: 500px;"></div>
</body>
</html>

相关内容

最新更新