javascript - limitar - limite de respuestas google forms
Adjuntar la marca de tiempo inicial de Google Form al final del registro para almacenar permanentemente la fecha de creación onFormSubmit (1)
Necesito poder almacenar (al anexar al registro) la fecha de creación de las respuestas de Google Form donde la marca de tiempo inicial no se sobrescribe cuando se edita el formulario. Este formulario está alojado en Google y se encuentra dentro de un entorno de Google Apps for Business.
Esta información existe pero en algún momento, pero se descarga en la actualización del formulario. Parece que esto tendría una amplia aplicación para las personas que usan Formularios de Google que se editan después de su creación con fines analíticos.
Este foro de Google Docs explica una situación bastante similar a la mía, pero no incluyó el código que utilizaron.
Busqué en el sitio del desarrollador de Google y determiné que la mejor manera de implementar esta función sería usar un disparador onFormSubmit en la hoja de cálculo de respuesta en lugar del formulario en sí, ya que el campo al que quiero hacer referencia (Marca de tiempo) no se puede seleccionar hasta escrito en la hoja de google y porque quiero almacenar el resultado en una nueva columna en la hoja de cálculo de todos modos.
Intenté hacer referencia a esta solución y modificarla para mi propósito, ya que era el fragmento de código más cercano que encontré al problema que estoy tratando de resolver.
A continuación está mi código comentado. Aunque todavía hay cosas que necesito abordar, como mi if if y mi hardcoding the createDateColumn, pude hacer que esto se ejecutara sin esto (usando el menú de ejecución en Google App Script vinculado a la hoja de cálculo) pero la celda debería estar escribiendo la marca de tiempo a por alguna razón ahora tiene un valor de "Rango" después de que se ejecutó el guión, así que supongo que estoy configurando el valor incorrectamente.
También traté de agregar una nueva entrada en el formulario, sin embargo, el onFormSubmit no se ejecutó por sí mismo, por lo que puede haber otros problemas no resueltos.
Cualquier ayuda es apreciada. Mis habilidades de codificación están un poco oxidadas.
function onFormSubmit(e)
{
var ss = SpreadsheetApp.getActiveSheet();
var lastRowInx = ss.getLastRow(); // Get the row number of the last row with content
var createDateColumn = 50; //CreateDateColumn is currently in AX (Column 50) Possibly find named range since hardcoded isn''t ideal. LastColumn doesn''t work because some responses not required
// if () condition should be ss.getRange(lastRowInx, createDateColumn) == ""; so that subsequent edits to Google Form which trigger timestamp updates don''t overwrite original create date
//{
var timestamp = ss.getRange(lastRowInx, 1); // Get timestamp entry
var createDate = ss.getRange(lastRowInx, createDateColumn);
createDate.setValue(timestamp);
//}
//else {} //should be do nothing
}
**** ACTUALIZACIÓN **** ¡Funciona! Gracias por su ayuda @Sandy.
Para solucionar mis otros problemas que mencioné anteriormente, también modularé el código ya que estoy haciendo algunas otras tareas en FormFressSubmit y quería poder usar createDate en otra función. Nota: He eliminado las otras funciones del fragmento de código ya que no se aplican a la pregunta.
También utilicé getMaxColumns () en lugar de hardcoding el número de columna.
Aquí está el código actualizado para el uso futuro del usuario
function onFormSubmit(e)
{
var ss = SpreadsheetApp.getActiveSheet();
var lastRowInx = ss.getLastRow(); // Get the row number of the last row with content
var createDateColumn = ss.getMaxColumns(); //CreateDateColumn is currently in AX (Column 50) which is the last/max column position
var createDate = setCreateDate(ss, lastRowInx, createDateColumn);
}//This is the end of onFormSubmit
function setCreateDate(ss, lastRowInx,createDateColumn) // Stores the create date timestamp in Column AV on the backend
{
if (ss.getRange(lastRowInx, createDateColumn).getValue() == "") // so that subsequent edits to Google Form which trigger timestamp updates don''t overwrite original create date
{
var timestamp = ss.getRange(lastRowInx, 1).getValue(); // Get timestamp entry which is currently in A (Column 1)
var setDate = ss.getRange(lastRowInx, createDateColumn);
var createDate = new Date(timestamp);
setDate.setValue(createDate).setNumberFormat("MM/dd/yyyy hh:mm:ss");
}
else {} //should do nothing
return createDate;
}//This is the end of setCreateDate function
Cambia esto:
var timestamp = ss.getRange(lastRowInx, 1);
A:
var timestamp = ss.getRange(lastRowInx, 1).getValue();
En este momento, es un rango.