현재 여러 시트 (몇 가지 탭으로도 알려져 있음)에서 수년 동안의 수치 데이터를 사용하는 스프레드 시트로 작업하고 있으며, 1 년 가치. 몇 가지 온라인 자습서를 따르면 나는 주어진 해 동안 간단한 차트 대시 보드를 만들었습니다. 이것은 Serge의 대답 (set "ss"를 전역으로 만들고 setActiveSheet 사용)을 읽은 후 2 개 수정하여 지금까지 가지고있는 코드 조각입니다 (차트를 그릴 부분 제외).스프레드 시트에서 다른 시트를 선택하려면 Google Apps Script listbox를 사용하십시오.
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;
}
이제 드롭 다운 상자를 사용하여 다른 시트 (예 : 연도)를 선택하고 이에 따라 차트를 업데이트하고 싶습니다. 그러나 "연도"를 선택하여 올바르게 표시 할 수는 있지만 새 시트의 데이터를 사용하도록 변경할 수는 없습니다. 아마도 여기에 어떤 전문가가 조언을 해줄 수 있을까요?
감사합니다. 그러나 내가 결국 언급했듯이 차트는 여전히 올바르게 업데이트되지 않습니다. 아마도 내 코드의 관련 비트를 업로드했을 때 명백한 오류를 볼 수 있습니까? – Louis
몇 가지 테스트를 수행하고 처리기 기능에서 대시 보드를 다시 만들었을 때 첫 번째 숨기기 작업을 수행 할 수있게되었지만 실제로 갈 수있는 올바른 방법인지 확신 할 수 없습니다 ... 더 나은 솔루션을 제안 해 주시기 바랍니다. 너를 위해서. –
각 시트마다 다른 패널을 만들고 가시성을 변경한다는 것은 매우 효율적으로 들리지 않습니다. :-) 어쨌든 제안 주셔서 감사합니다! – Louis