Estoy tratando de usar el script de Google para crear un diálogo rápido para el usuario con una lista desplegable.

Aquí es donde estoy hasta ahora:

function addProject() {
  var ui = SpreadsheetApp.getUi(); // Same variations.

  var result = ui.prompt(
      'Select project from drop-down',
      '(use "Project Index" sheet to add a project)',
      ui.ButtonSet.OK);

  // Process the user's response.
  var button = result.getSelectedButton();
  var text = result.getResponseText();
  if (button == ui.Button.OK) {
    // User clicked "OK".
    ui.alert('You selected ' + text + '.');
  } else if (button == ui.Button.CANCEL) {
    // User clicked "Cancel".
    ui.alert('I didn\'t get your project.');
  }
}

Un botón en mi hoja activa esta función. Todo esto hace es crear un mensaje en el que puede ingresar una cadena. Pero necesito usar la validación de datos para crear una lista desplegable que haga referencia a un rango en otra parte de mi hoja para que el usuario pueda ingresar lo que quiera.

¿Alguien puede ayudarme a obtener una lista desplegable en un diálogo rápido?

¡Gracias!

1
Alex Libengood 17 feb. 2018 a las 02:44

2 respuestas

La mejor respuesta

Desafortunadamente, no puede usar ui.prompt de esta manera. Lo mejor que puede hacer es utilizar un cuadro de diálogo personalizado en el que puede poner un menú desplegable.

editar: para obtener una respuesta de código parcial, consulte la respuesta aquí, ¿Cómo crear una lista desplegable en el cuadro de entrada de la hoja de cálculo (App Script)?

1
Chris 16 feb. 2018 a las 23:56
function NewItem() {
  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var app = UiApp.createApplication().setTitle('My Application');
  var panel = app.createVerticalPanel();
  var lb = app.createListBox(true).setId('myId').setName('myLbName');
var sh = SpreadsheetApp.getUi();
var response = sh.alert("Confirm!", "This will delete the selected item in all sheets, do you want to continue?", sh.ButtonSet.OK_CANCEL)

if (response == sh.Button.OK)
    {

  // List of categories for user to select
  lb.setVisibleItemCount(9);
  lb.addItem('Category 1');
  lb.addItem('Category 2');
  lb.addItem('Category 3');
  lb.addItem('Category 4');


  panel.add(lb);
  var button = app.createButton('OK');
  var handler = app.createServerClickHandler('click').addCallbackElement(panel);
  button.addClickHandler(handler);
  panel.add(button);
  app.add(panel);
  doc.show(app);
  }
    if (response == sh.Button.CANCEL)
    {
      sh.alert("Canceled", "The action is canceled", sh.ButtonSet.OK)
    }

}


function click(eventInfo) {
  var app = UiApp.getActiveApplication();
  // get category that user chose
  var value = eventInfo.parameter.myLbName;
  var doc = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("items_with_category");
  var RevenueItem = Browser.inputBox("Copy paste the name of the revenue item from the QB report:");
  var COSItem = Browser.inputBox("Copy paste the name of the COS item from the QB report:");
  var Client = Browser.inputBox("Copy past the client from QB report:");
  var RevAcct = Browser.inputBox("Revenue Account Code (eg. 4001):");  
  var COSAcct = Browser.inputBox("Revenue Account Code (eg. 5001):");  
  var lastRow = doc.getLastRow()+1;
  //doc.getRange(lastRow,1).setValue(value);

  doc.getRange(lastRow,1).setValue(COSItem);
  doc.getRange(lastRow,2).setValue(RevenueItem);
  doc.getRange(lastRow,3).setValue(Client);
  doc.getRange(lastRow,4).setValue(value);
}
-1
Givas 26 sep. 2018 a las 13:23