tutorial sheets scripts script openbyurl macro google español ejemplos docs developer apps app google-apps-script google-spreadsheet

google apps script - sheets - Las celdas que contienen funciones personalizadas devuelven "NaN" cuando la hoja de cálculo no está abierta.(Aplicación de aplicaciones de Google Script accediendo a la hoja de cálculo de google)



google spreadsheet macro (2)

Como maestra de escuela secundaria, grabo toda mi calificación en una hoja de cálculo de Google. He escrito funciones personalizadas dentro de esa hoja de cálculo a las que se accede desde la hoja de cálculo. Eso todo funciona bien.

También tengo una aplicación web simple (pero independiente) escrita en el script de Google Apps que resume la información de calificación para cada alumno que accede a ella y la devuelve en una tabla. Esto ha funcionado perfectamente durante aproximadamente 8 meses. Sin embargo, los estudiantes ahora obtienen un error "NaN" cuando intentan verificar sus calificaciones. El "NaN" solo se devuelve para las celdas que usan funciones personalizadas. Simplemente abriendo la hoja de cálculo fuente, soluciona el problema temporalmente. Pero poco después de cerrar la hoja de cálculo, la aplicación web vuelve a devolver "NaN".

Supongo que tiene algo que ver con cuándo / cómo se recalculan estas celdas, pero no sé cómo hacer para que las celdas conserven su valor mientras se cierra la hoja de cálculo. Cualquier ayuda sería muy apreciada.


Con el consejo de Eric, implementé la siguiente función (que se ejecuta desde el principio en mi aplicación):

function refreshSheet(spreadsheet, sheet) { var dataArrayRange = sheet.getRange(1,1,sheet.getLastRow(),sheet.getLastColumn()); var dataArray = dataArrayRange.getValues(); // necessary to refresh custom functions var nanFound = true; while(nanFound) { for(var i = 0; i < dataArray.length; i++) { if(dataArray[i].indexOf(''#N/A'') >= 0) { nanFound = true; dataArray = dataArrayRange.getValues(); break; } // end if else if(i == dataArray.length - 1) nanFound = false; } // end for } // end while }

Básicamente, mantiene la actualización de la hoja (utilizando .getValues ​​()) hasta que desaparezcan todos los # N / A. Funciona de manera fabulosa, pero agrega un pequeño retraso.


Solo para agregar mi propio comentario:

He encontrado un efecto similar cuando se usan las secuencias de comandos de la aplicación Google para obtener valores de las celdas pobladas por funciones de hoja como INDEX () y QUERY ().

El comentario de Eric de usar getValues ​​() en vez de getValue () puede hacer el truco. Pero no lo he comprobado.

Un enlace a mi pregunta está aquí: https://.com/questions/32519900/check-if-google-sheet-query-returned-rows?noredirect=1#comment53128587_32519900 .