google apps script - tutorial - "SpreadsheetApp.getUi() no se puede llamar desde este contexto"
no se puede usar browser msgbox() desde este contexto (1)
Los Ui Dialogs no pueden ser llamados por funciones disparadas en el tiempo, tienen que ser activados por una acción del usuario, es decir, un clic en un elemento de menú o algún tipo de botón que llame a la función que muestra la UI.
UTILIZANDO:
Hojas de cálculo de Google (nuevo)
OBJETIVO:
En una hoja de cálculo, muestre un cuadro de diálogo modal creado a partir de HTML, luego ejecute una función y luego cierre el indicador HTML automáticamente. El diálogo permanece hasta que la función termina de ejecutarse, luego desaparece automáticamente. Este proceso debe repetirse cada 3 horas y la secuencia de comandos debe ejecutarse como yo (ya que tengo permisos de edición que otros usuarios no) por lo que los disparadores simples probablemente no funcionen (he leído que debe crear un desencadenante instalable) si desea que la función se ejecute como usted y no sea quien sea el usuario actual en el momento dado)
LO QUE TENGO:
- Una función .gs Magic_Telling, que crea un diálogo modal mediante el uso de un archivo HTML
- Un archivo HTML, Prompt_Styling, que contiene el estilo css / html para el aviso. Este archivo HTML llama a una función .gs All_In que procesa las filas
MI CÓDIGO
Este es mi primer guión, así que no te desanimes.
Magic_Telling
Crea el diálogo modal desde el archivo HTML
function Magic_Telling() {
var UI = SpreadsheetApp.getUi();
var newline = ''/n''
// Display a modal dialog box with custom HtmlService content.
var htmlOutput = HtmlService.createHtmlOutputFromFile(''PromptStyling'')
.setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setWidth(300)
.setHeight(100);
UI.showModalDialog(htmlOutput, '' '');
}
Prompt_Styling
Archivo HTML para diseñar prompt + script que ejecuta la función All_In que procesará filas
<html>
<head>
// some irrelevant stuff here
</head>
<script>
window.onload = function() {
google.script.run
.withSuccessHandler(closeDialog)
.All_In();
};
window.closeDialog = function() {
google.script.host.close();
};
</script>
</html>
Todo dentro
Función para procesar filas
function All_In() {
UnlockRowBlocks();
UnhideRowBlocks();
LockRowBlocks();
HideRowBlocks();
}
Cuando ejecuto MagicTelling desde el editor de scripts, funciona muy bien . La secuencia completa se ejecuta (se muestra el mensaje, All_In ejecutado, el prompt desapareció). Perfecto.
Luego creé un desencadenante instalable al ir al Editor de secuencias de comandos> Recursos> activadores del proyecto actual y agregué un disparador para ejecutar Magic_Telling cada 3 horas. (Supongo que es un "disparador instalable")
El problema: recibo un mensaje de error ...
Cannot call SpreadsheetApp.getUi() from this context.
... cuando la función alcanza la primera línea de Magic_Telling
¿Qué debo hacer para evitar esto? POR FAVOR AYUDE, y gracias de antemano por su generosidad. Me complace proporcionar tantos detalles como necesites. Realmente muy agradecido por cualquier ayuda, completamente perdido aquí.