我目前正在处理一个电子表格,该电子表格在不同的表格中有几年的数字数据(也被一些人称为标签!?),每张表格/标签代表一年的价值。在几个在线教程之后,我为任何一年创建了一个简单的图表仪表板。这是我到目前为止的代码片段(除了绘制图表的部分除外),在阅读Serge的答案(使“ss”成为全局并使用setActiveSheet)后进行了2次修改。
var ss = SpreadsheetApp.openById(ssID);
ss.setActiveSheet(ss.getSheetByName("2012"));
function doGet() {
var sheet = ss.getActiveSheet();
var data = sheet.getRange(1,1,sheet.getMaxRows(),sheet.getMaxColumns());
var dashboard = Charts.newDashboardPanel()
.setDataTable(data)
.build();
var uiApp = UiApp.createApplication().setTitle("My Dashboard");
// Dropdown box
var listBox = uiApp.createListBox() // Choose data by year
.setId('listBox')
.setName('listBox')
.setVisibleItemCount(1);
for (i=0; i<ss.getNumSheets(); i++) {
listBox.addItem(ss.getSheets()[i].getSheetName());
}
var infoLabel = uiApp.createLabel('Select from List').setId('info').setVisible(false);
// Add a handler to the ListBox when its value is changed
var handler = uiApp.createServerChangeHandler('showSelectedinfo');
handler.addCallbackElement(listBox);
listBox.addChangeHandler(handler);
// UI Element: Grid
var mygrid = uiApp.createGrid(1, 3);
mygrid.setWidget(0, 0, uiApp.createLabel('By Year:'));
mygrid.setWidget(0, 1, listBox);
mygrid.setWidget(0, 2, infoLabel)
var controlsPanel = uiApp.createVerticalPanel().add(mygrid);
uiApp.add(controlsPanel).add(dashboard);
return uiApp;
}
function showSelectedinfo(e){
var app = UiApp.getActiveApplication();
var selectedItem = e.parameter.listBox;
var listBox = app.getElementById('listBox');
app.getElementById('info').setText('You selected :'+selectedItem).setVisible(true)
.setStyleAttribute('color','#008000');
ss.setActiveSheet(ss.getSheetByName(selectedItem));
return app;
}
现在我想使用下拉框选择不同的工作表,即年份,并相应地更新图表。但是,虽然我可以选择“年份”并正确显示,但我仍然无法更改为使用新工作表中的数据。也许这里的任何专家都可以提供一些指示?
答案 0 :(得分:1)
以下是实现此目的的一种方法示例。它使用带标签的技巧以自定义方式显示结果,但如果您不需要它,只需保留ListBox和处理程序。
var ss = SpreadsheetApp.getActiveSpreadsheet()
function listSelect() {
var app = UiApp.createApplication().setHeight('100').setWidth('200').setTitle('Select Sheet');
var p = app.createVerticalPanel();
var serverHandler = app.createServerHandler('handler').addCallbackElement(p)
var listBox = app.createListBox() .setId('listBox').setName('listBox').addChangeHandler(serverHandler);
var label = app.createLabel('Please select sheet from here').setId('label')
.addMouseOverHandler(app.createClientHandler()
.forEventSource().setVisible(false)
.forTargets(listBox).setVisible(true));
for(n=0;n<ss.getNumSheets();++n){
listBox.addItem('You are selecting '+ss.getSheets()[n].getName(), ss.getSheets()[n].getName())
}
listBox.setVisible(false)
p.add(listBox).add(label);
app.add(p);
ss.show(app)
return app;
}
function handler(e){
var app = UiApp.getActiveApplication();
var listBox = app.getElementById('listBox');
var label = app.getElementById('label');
listBox.setVisible(false);
label.setVisible(true).setText('You have selected sheet '+e.parameter.listBox);
ss.setActiveSheet(ss.getSheetByName(e.parameter.listBox));
// app.close()
return app;
}