Я делюсь электронной таблицей / приложением, предназначенным для использования в качестве инструмента оценки для некоторых коллег. Я хочу, чтобы они сделали копию исходной электронной таблицы (шаблона) и работали самостоятельно, чтобы они не перекрывались при отправке ответов.
Сначала я настроил оповещение, и оно работало отлично. При создании копии она снова появлялась при открытии копии. Затем я настроил боковую панель, и это не работает. Они оба работают на одной и той же функции 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>
Кто-нибудь знает, есть ли способ сделать всплывающую боковую панель также при копировании? Спасибо за помощь!