首页 > 解决方案 > 为什么在制作原始电子表格的副本时,配置为使用 onOpen 函数运行的侧边栏没有出现?

问题描述

我正在共享一个电子表格/应用程序,旨在用作某些同事的评估工具。我希望他们制作原始电子表格(模板)的副本并自行工作,这样他们在提交答案时就不会重叠。

首先,我配置了一个警报,它运行良好。制作副本时,它会在副本打开时再次弹出。然后我配置了一个侧边栏,这不起作用。它们都在同一个 onOpen 函数上运行,它们之间的主要区别在于侧边栏具有 HTML。

这是 .gs 代码:

//Displays spreadsheet use instructions.
fu
nction showInstructions() {
  var ui = SpreadsheetApp.getUi().alert('¡Recuerda leer las instrucciones de uso antes de comenzar!');
}

//Displays thanks banner after submitting form.
function showThanks() {
  var ui = SpreadsheetApp.getUi().alert('¡Gracias por participar!');
}

//Pops instructions and creates menus.
function onOpen() {   

  showInstructions();
  showSidebar();

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var menuButtons = [ {name: "Submit", functionName: "submit"}];
  ss.addMenu("BIMmx", menuButtons);
}

function submit() {
  askName();
  copyData();
  showThanks();
  clear();
}

//Show sidebar with instructions.
function showSidebar() {
  var output = HtmlService.createHtmlOutputFromFile('sidebar').setTitle('Instrucciones');
  SpreadsheetApp.getUi().showSidebar(output);
}

//Asks for user name before submitting data to master sheet.
function askName() {

  var ui = SpreadsheetApp.getUi();

  //Display prompt.
  var result; 
  var text = "";

  while (text == ""){
    result = ui.prompt(
      '¡Completa la evaluación!',
      'Ingresa tu nombre:',
      ui.ButtonSet.OK_CANCEL);

    // Process user's response.
    var button = result.getSelectedButton();
    text = result.getResponseText();
    if (text == "") 
      ui.alert('Nombre no puede estar vacío.');
    else if (button == ui.Button.OK) {
      // User clicked "OK".
      ui.alert('Tu nombre es ' + text + '.');
    } else if (button == ui.Button.CANCEL) {
      // User clicked "Cancel".
      ui.alert('No entendí eso.');
    } else if (button == ui.Button.CLOSE) {
      // User clicked X in the title bar.
      ui.alert('Cerraste el diálogo.');
    }


  }

 fillUser(text);

}

//Fills rows with submitting username.
function fillUser(result) {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  ss.getRange("K2").setValue(result);  
  var lr = ss.getLastRow();
  var lc = ss.getLastColumn();
  var fillDownRange = ss.getRange(2, lc, lr-1);
  ss.getRange("K2").copyTo(fillDownRange);
}

//Backup data to master spreadsheet.  
function copyData() {

  var sss=SpreadsheetApp.getActive();
  var sh=sss.getSheetByName('Input');  
  var rg=sh.getRange(2,1,sh.getLastRow()-1,11);
  var sData=rg.getValues().join(";");

  //Cambiar por dirección del nuevo servicio web
  var url = "https://script.google.com/macros/s/AKfycbywmtl7mpwd0RO2bS-bvFuYFlo-7Nv3zPTvphwjIDa0GwERTV8/exec";  

  var payload = {    
    "sData" : JSON.stringify(sData),    
  }

  var options = {
    "method" : "POST",
    "payload" : payload,
    "followRedirects" : true,
    "muteHttpExceptions" : true,
  };

  var result = UrlFetchApp.fetch(url, options);
  //Logger.log(JSON.parse(result));  


}

//Clean sheet once submission is done.  
function clear() {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Input');
  sheet.getRange('A2:K').clearContent();
}

这是 .html 代码:

<!DOCTYPE html>
<html>
  <head>
  <base target="_top">
  </head>
  <body>
    <iframe width="300" height="168.75" frameborder="0" src="https://www.youtube.com/embed/T2pCuKOoo3I" allowfullscreen></iframe>
    <p>
     - Haz una copia del documento marcado como (Template) y trabaja sobre ella.
    </p>
    <p>
    1. Renombra la copia que creaste como “RecursosHumanos-EvaluadorDeDesempeno-TuNombre.
    </p>
    <p>
    2. Lee los comentarios de cada rubro a evaluar desplazando el cursor/mouse por su encabezado.
    </p>
    <p>
    3. Evalúa a tus colegas.
    </p>
    <p>
    4. Incluye tu nombre y usa tu fila como auto-evaluación.
    </p>
    <p>
    5. Ingresa los datos en el menú BIMmx > Submit.
    </p>
  </body>
</html>

有谁知道在制作副本时是否有办法让侧边栏弹出?谢谢您的帮助!

标签: google-apps-script

解决方案


推荐阅读