Google スプレッドシートのリーダー ボード (Google チャート) を表示する GAS があります。
スプレッドシートが更新されるたびにグラフが更新され、最新のスコアが表示されるようにしたいと考えています。
新しいスコアがあるたびに、スプレッドシートは新しいスコアを計算し、リストを更新します。(この部分は既に GAS を使用して正常に動作しています)
うまくいかないように見えるのは、webApp がチャートをリロード/再描画しないことです。
このlogChange()
関数はonChange()
、スプレッドシートが変更されたときに起動するスプレッドシート トリガーによって呼び出され、そのプロセスの開始と終了を正常に記録します (redrawUI()
関数の呼び出しに成功)。
webApp コードを以下に示します。スプレッドシートに変更があるたびに、このアプリでグラフを再描画するのを手伝ってくれる人はいますか?
function doGet(e) {
var app = drawUI();
return app;
}
function logChange(e) {
Logger.log("Changed at: " + new Date());
redrawUI();
Logger.log("after redrawUI recall " + new Date());
return app;
}
function redrawUI() {
var app = drawUI();
return app;
}
function drawChart() {
var ss = SpreadsheetApp.openById('txS....w'); //Spreadsheet Key
var hs = ss.getSheetByName('All Scores');
var data = hs.getRange(1, 1, 11, 3);
var barChart = Charts.newBarChart()
.setDataViewDefinition(Charts.newDataViewDefinition().setColumns([1,2]))
.setDataTable(data)
.setOption('axisTitlesPosition', 'in')
.setOption('hAxis.minorGridlines.count', 9)
.setOption('theme', 'maximized')
.setOption('colors', ['#45818e'])
.setLegendPosition(Charts.Position.NONE)
.setYAxisTextStyle(Charts.newTextStyle().setFontName('Courier New').setFontSize(48))
.setDimensions(1000, 800)
.build();
return barChart;
}
function drawUI() {
var barChart = drawChart();
var app = UiApp.createApplication();
var mainPanel = app.createHorizontalPanel();
var hsLabel = app.createLabel("THE Geek Game 2013")
.setStyleAttribute("font-size", "5em")
.setStyleAttribute("font-weight", "bold")
.setStyleAttribute("line-height", "2em");
var subLabel = app.createLabel("Leader Board")
.setStyleAttribute("font-size", "3em")
.setStyleAttribute("font-weight", "bold")
var vPanel = app.createVerticalPanel().setId("vPanel");
mainPanel.add(vPanel).setSize("100%", "100%")
.setCellHorizontalAlignment(vPanel, (UiApp.HorizontalAlignment.CENTER));
vPanel.add(hsLabel).add(subLabel);
vPanel.add(barChart).setSize("500", "100%");
vPanel.setCellHorizontalAlignment(hsLabel, (UiApp.HorizontalAlignment.CENTER));
vPanel.setCellHorizontalAlignment(subLabel, (UiApp.HorizontalAlignment.CENTER));
app.add(mainPanel);
app.createServerHandler("redrawUI");
return app;
}
現在のアプリがどのように表示されるかを確認するには、次のリンクを参照してください: https://script.google.com/macros/s/AKfycbykZZYCXd9SCJL0pnoNrR7L5ekdFQb8CzRsut0vLunKwq4jg8o/exec