user1399702
user1399702

Reputation: 3

GUI not passing values to spreadsheet

I've created a GUI (MyGui) with a flow panel (mainPanel), a text box (textValue) and a button (getETA). All in a sites script.

The idea is that a value is entered in the text box, the button is clicked and the value is then placed in the cell A1 of a spreadsheet.

There is no handler configured in the GUI and I've copy pasted the script to a fresh site, no success though.

The problem I'm having is that all I get in the spreadsheet cell is "undefined". Also if I run a debug on the clickGetETA function I get the following error message: "Cannot read property "parameter" from undefined"

I'm new to this but my best guess is that the details of the GUI are not being passed on to the clickGetETA function. I've searched what I can but I can't appear to find a solution...

If someone could tell me where I'm going wrong I'd appreciate he help.

function doGet() {
    var app= UiApp.createApplication();
    app.add(app.loadComponent("MyGui"));
    var clickHandler = app.createServerHandler('clickGetETA');
    clickHandler.addCallbackElement(app.getElementById('mainPanel'));
    app.getElementById('getETA').addClickHandler(clickHandler);
    return app;
}

function clickGetETA(e) {
    var sheet = SpreadsheetApp.openById('abcdefghjklmnopqrstuvwxyz');
    var ss = sheet.getActiveSheet();
    var target = ss.setActiveCell("A1");
    target.setValue(e.parameter.textValue);
}

Upvotes: 0

Views: 1836

Answers (3)

David Sheffield
David Sheffield

Reputation: 3

What fixed it for me was going into the UI editor and making sure I had an ID assigned for form fields and a name. I was missing the name so my e.parameter.fieldName was undefined.

Upvotes: 0

eddyparkinson
eddyparkinson

Reputation: 3700

Change:

var ss = sheet.getActiveSheet();
var target = ss.setActiveCell("A1");

To :

var ss = sheet.getSheetByName("SheetName");
var target = ss.getRange("A1");

Good examples for this kind of thing are here: https://developers.google.com/apps-script/guide_user_interfaces

It should be run as a service. i.e. you use the get function.

Notes: the "e" parameter does not exist when you debug. Debugging is a little limited. ActiveSheet and ActiveCell are designed to be used from a spreadsheet not a service. A service creates a web page rather than a popup box.

Eddy.

Upvotes: 2

Henrique G. Abreu
Henrique G. Abreu

Reputation: 17752

The callback element used in the addCallbackElement may be a single widget or the a panel of your GUI. When passing a panel, all widgets bellow in the panel hierarchy will be included in the parameter. Are you sure your textbox is inside the panel you're adding?

Also, the values of the widgets can be accessed in the handler function using the widget name (that you must set on the GUI builder). Notice the difference between name and id, the id you use to get the widget using getElementById and also to determine the widget source of the events, when you use the same handler for multiple widgets. And the name for accessing the value. Are you sure you named your textbox as textValue?

Upvotes: 0

Related Questions