google-apps-script - 为什么在制作原始电子表格的副本时,配置为使用 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>
有谁知道在制作副本时是否有办法让侧边栏弹出?谢谢您的帮助!
解决方案
推荐阅读
- gcloud - Stackdriver 提醒政策未触发
- react-native - 为导航抽屉添加菜单按钮会出错
- java - 在 Android 中没有得到 USSD 代码的响应
- vue.js - 如何渲染一个包含 3 个项目和 2 列的循环,其中 1 个在第一列,另外 2 个在第 2 列?
- c++11 - 自己声明结构?
- oracle - 将 Informix 查询转换为 Oracle?
- vba - 循环遍历“条形样式”中的项目,阅读项目
- android - Android Google Play 商店应用程序不兼容 64 位
- unity3d - 如何更改附加了动画师的 UI 图像?
- ibm-cloud - Watson Assistant:我可以使用示例中的实体来定义意图吗?