¿Por qué no está 'google.script.run' no trabajando desde la etiqueta del cuerpo html 'onload'?
Escribí una función para una Hoja de Google (en el editor de scripts de Sheet) en la que el usuario selecciona una celda, ejecuta la función de un menú personalizado, y luego un formulario html aparece con el texto de la célula seleccionada y una célula adyacente en el formulario.
Aquí está el archivo 'Code.gs':
function reviewApplication() {
var html = HtmlService.createHtmlOutputFromFile('Index').setSandboxMode(HtmlService.SandboxMode.IFRAME);
SpreadsheetApp.getUi().showModalDialog(html, 'Review PD Application');
}
function getTitleInfo() {
return SpreadsheetApp.getActiveRange().getValue();
}
function getTeacherInfo() {
var aRow = SpreadsheetApp.getActiveRange().getRow();
return SpreadsheetApp.getActiveSheet().getRange(aRow, 5).getValue();
}
Y aquí está el archivo 'Index.html':
html
El problema es que cuando la UI aparece con la forma, los elementos 'títulos' y 'teachername' de la forma están en blanco, pero se supone que están poblados con el texto en esa fila de la hoja de cálculo. Cuando miro la transcripción de ejecución, la función 'reviewApplication' funciona correctamente, pero la función 'getTitleInfo' falla y la duración es de 0 segundos. ¿Sabes por qué está fallando en este punto?
Hay otro código de script para cuando el formulario se presenta, pero lo dejo ahora porque he reducido el problema hasta cuando el HTML se carga. Extrañamente, esto estaba funcionando bien hasta el fin de semana pasado.
Aquí hay una imagen que muestra que la función 'reviewPD' funciona, pero entonces la función 'getTitleInfo' falla.
Pregunta hecha hace 3 años, 4 meses, 28 días - Por bitwisewizard
3 Respuestas:
-
Me gustó y funcionó.
GS:
function reviewApplication() { var html = HtmlService.createHtmlOutputFromFile('ah3'); SpreadsheetApp.getUi().showModalDialog(html,'Review PD Application'); } function getTitleInfo() { return 'Teacher Title'; } function getTeacherInfo() { return 'Hello World'; }
HTML:
html
Debe ser algo malo con la forma en que estás recibiendo datos.
Pruebe la prueba getTeacherInfo() o getTeacherInfo() por sí mismos para asegurarse de que está funcionando
**Esta versión realmente hace la colección de datos muy similar a lo que quieres y está completamente funcionando excepto que no he probado el envío porque no creo que tenga el código para apoyarlo.
Código:
function reviewApplication() { var html = HtmlService.createHtmlOutputFromFile('ah3'); SpreadsheetApp.getUi().showModalDialog(html,'Review PD Application'); } function getTeacherInfo() { const ss=SpreadsheetApp.getActive(); const sh=ss.getActiveSheet(); const row=sh.getActiveRange().getRow(); return sh.getRange(row,5).getValue(); } function getTitleInfo() { return SpreadsheetApp.getActiveRange().getValue(); }
HTML:
html
Respondida el Dec 18, 2020 a las 04:46 - por logiclinguist
Votos positivos: 0 | Votos negativos: 0 -
El problema que estás experimentando es que la función
google.script.run
no funciona desde el atributoonload
de la etiquetabody
en tu archivo HTML. La razón por la que esto no funciona es porque las funciones degoogle.script.run
no se pueden llamar antes de que la página esté completamente cargada.La solución a este problema es usar la función
google.script.run
después de que la página haya cargado completamente. Para lograr esto, puedes mover la llamada a la funcióngoogle.script.run.withSuccessHandler(onTitle).getTitleInfo()
al final de tu script dentro de la etiquetabody
, o bien, puedes utilizar la funciónwindow.onload
para llamar a la función después de que la página se haya cargado completamente.Aquí te muestro cómo modificar tu archivo 'Index.html' utilizando la función
window.onload
:html
Al hacer esto, la función
google.script.run.withSuccessHandler(onTitle).getTitleInfo()
se ejecutará después de que la página se haya cargado completamente, evitando así el problema que estás experimentando. Espero que esta solución te ayude a solucionar tu problema.Respondida el Dec 19, 2020 a las 04:45 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema es que estás intentando llamar a
google.script.run
desde el eventoonload
del cuerpo HTML. Esto no funcionará porque el objetogoogle.script.run
solo está disponible después de que se haya cargado el Servicio de Ejecución de Apps Script.Para resolver este problema, debes agregar el siguiente código a la parte superior de tu archivo
Index.html
:```html
```
Esto garantizará que
google.script.run
solo se llame después de que el Servicio de Ejecución de Apps Script esté disponible.Respondida el Dec 19, 2020 a las 04:54 - por Gemini
Votos positivos: 0 | Votos negativos: 0