2017-01-18 3 views
0

hereのガイドに従って、Google Apps Scriptでダッシュボード機能を開発しました。私は、あなたがスクリプト関数(この例ではdrawChart()関数)を呼び出すことを実装すると、それはhereのように "アクティブなコンテンツ"とみなされることが分かりました。 私はHTMLを使用しない他の例を見てきましたが、それらはすべて償却されたUiAppクラスの使用を必要とするようです。だから、Google Apps Scriptのダッシュボード/グラフ機能でHTTPSセキュリティ証明書を取得する唯一の方法はありますか?これが事実であれば、それはむしろ限定的なようです。私はポストまたは2つの白い画面だけを得る同様の欲求不満を言及し、それがHTTPSの制限のためだと思う。Google AppsではHTMLで「アクティブコンテンツ」が許可されず、UiAppクラスは償却されました

ここに問題があると感じたので、私はコードを投稿しませんでした。ここに私のコードがあります。私はまた、関数/スクリプトを持たないシンプルなHTML "Hello World"ファイルを試してみました。それは私のGoogleスプレッドシートに関連するここではスクリプトです:ここでは

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> 

が。

+0

あなたは円グラフデモにリンクされているガイドは、アプリケーションのスクリプトでうまく動作します。あなたがコードを掲示すれば、人々はあなたの問題がどこにあるかもしれないかを示すことができます。 https://script.google.com/macros/s/AKfycbzlyXzJOGq-bpsuS9teSsgdZ3DBM_XjOUClryBEAzPQ3_EySqo/exec –

+0

ありがとうございます、コードを投稿しました。私は文法上の誤りはありません、私はちょうど白い画面を取得しています、そして私の疑惑はGoogleが実装するセキュリティプロトコルでした。私はあなたのスクリプトの仕事を見て、あなたがしたこととやったことの間に何が違うのか不思議です。おそらく私はコードをGoogleスプレッドシートのダイアログボックスとしてポップアップ表示させようとしていますか? – DeCodened

+0

ああ、クライアント側でサーバー側のコードを実行しようとしています。それは物事を壊すでしょう。 –

答えて

0

これはどのように動作するかの簡単な例です。私は基本的な例を取り上げ、円グラフの例の値をスプレッドシートに追加しました。クライアント側は、データを取得するためにサーバー側を呼び出す必要があります。これは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> 
+0

このスペンサーに感謝します!ちょうど、私がする必要があるのは、.gsファイルではなく、.gtmlファイル内のすべてのデータを取得し、その関数を.gsファイルから呼び出すことです。正しい?私が持っている唯一の他の質問は、.withSuccessHandlerの機能があなたが投稿したコードに正確にあることです。助けてくれてありがとう、これは見つけるのが難しいだろう。 – DeCodened

+0

ええと、これはHTTPSで保護されたWebサイトなしでも機能すると確信していますか?私はあなたがここで提案したことを試してみました。そしてあなたが示唆したコードに特に貼り付けていました。私はタイトルを見ますが、検索と検索の後、私は円グラフをプルアップすることはできません。私はHTTPSページが必要であるという制約があると思いますか?最後に私のファイルでこれを試してみましたが、私の.gsコード内の関数が終了する前に、画面が上がっていることに気付きました。 .withsuccessHandler()は、スクリプトが完了するまでHTMLを待たせることになっていたと思っていました。 – DeCodened

関連する問題