I’m building a simple web app that allows students to check their grades by entering their password. The application accesses my Google Sheets where I keep track of grades and shows the assignments that are missing for each student.
However, when I test the data retrieval using Browser.msgBox(), it works perfectly and displays the correct information. But when I attempt to display the same data in the actual web interface, I end up getting a generic message stating, “An unexpected error occurred.”
Here’s my code:
var gradesSheet = SpreadsheetApp.openById('your-sheet-id-here');
function doGet() {
var webapp = UiApp.createApplication().setTitle('Grade Checker');
var layout = webapp.createGrid(1, 2);
layout.setWidget(0, 0, webapp.createLabel('Enter Code:'));
layout.setWidget(0, 1, webapp.createPasswordTextBox().setName("userInput"));
var checkButton = webapp.createButton('Check Grades');
var clickHandler = webapp.createServerClickHandler('displayGrades');
clickHandler.addCallbackElement(layout);
checkButton.addClickHandler(clickHandler);
var container = webapp.createVerticalPanel();
container.add(layout);
container.add(checkButton);
webapp.add(container);
SpreadsheetApp.getActiveSpreadsheet().show(webapp);
}
function displayGrades(e) {
var webapp = UiApp.createApplication().setTitle('Grade Checker');
var userCode = e.parameter.userInput;
var codeRange = gradesSheet.getRange("A20:B20").getValues();
var studentName;
for(var j = 0; j < codeRange.length; j++) {
if(codeRange[j][1] == userCode) {
studentName = codeRange[j][0];
break;
}
}
var dataRange = gradesSheet.getRange("A5:Z25").getValues();
var headerRange = gradesSheet.getRange("A1:Z3").getValues();
var targetRow;
for(var j = 0; j < dataRange.length; j++) {
if(dataRange[j][0] == studentName)
targetRow = dataRange[j];
}
var output = "";
for(var j = headerRange[1].length-1; j >= 5; j--) {
if (targetRow[j] == "")
output += headerRange[1][j] + ": " + headerRange[0][j] + "pts" + "\n";
}
var display = webapp.createGrid(2, 1);
display.setWidget(0, 0, webapp.createLabel('MISSING WORK'));
display.setWidget(1, 0, webapp.createLabel(output));
var panel = webapp.createVerticalPanel();
panel.add(display);
webapp.add(panel);
return webapp;
}
Do you have any suggestions on what might be causing this issue? The data processing works, but the display part in the UI fails.