Cómo actualizar el código en googleappsscripts
Tengo un formulario HTML que permite al usuario completar el formulario desde una hoja de Google y agrega con éxito nuevas filas a la hoja. Creé el script de la aplicación basado en este tutorial.
Estoy intentando ampliar la funcionalidad de un script de aplicación para buscar duplicados en una fila de entradas basándose en datos de dos columnas y sobrescribir la fila existente si existe una coincidencia.
Sé que necesito un bucle for que recorra cada fila de la hoja de cálculo de Google para compararla con el campo de datos del formulario en cuestión, pero no sé cómo acceder a cada fila.
Aquí hay un ejemplo abreviado del formulario (en realidad es mucho más largo):
lt;form id="form"gt;
lt;form id = "formulario"gt;
lt; nombre de entrada="nombre" marcador de posición="nombre" /gt; ;
lt; nombre de entrada="algúnOtroCampo" marcador de posición="algúnOtroCampo" /gt;
lt; nombre de entrada="algúnCuartoCampo" marcador de posición="algúnOtroCampo" /gt;
p>
lt;div class="btn-success btn" onclick="SaveData()"gt;Guardar datoslt;/divgt;
lt;/formgt;
lt;/formgt;
lt;scriptgt;
función SaveData() {
var formData = new FormData(document.getElementById(" form")) ;
fetch('/macros/s/AKfycbwQFSXfeOKBHzf41MF6Nh5XIOjaPvr159-blUxsg5smD3BDH8qB4RUZRRo8q9nCJLb18w/exec',
{
método: 'post', p>
body: formData,
})
}
lt;/scriptgt;
El script de mi aplicación está agregando nueva fila Funciona bien, pero mi bucle for está escrito incorrectamente, por lo que no se encuentra ninguna coincidencia, o configurar el índice nextRow no funciona:
varsheetName = 'Entries'
var scriptProp = PropertiesService.getScriptProperties()
función intialSetup () {
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
scriptProp.setProperty('clave', activeSpreadsheet . getId())
}
función doPost (e) {
var lock = LockService.getScriptLock()
lock. tryLock (10000)
intente {
var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
var hoja = doc.getSheetByName( nombre de la hoja)
var encabezados = hoja.getRange(1, 1, 1, hoja.getLastColumn()).getValues()[0]
var nextRow = hoja.getLastRow() 1
var newRow = headers.map(function(header) {
return header === 'marca de tiempo'? new Date(): e.parameter[header]
})
var range =sheet.getDataRange();
var rangeData = range.getValues();
// Aquí es donde el script no puede encontrar una coincidencia en la hoja de cálculo
for(i = 1; i gt; rangeData.length; i ) {
if(rangeData[i][0] == e.firstName amp; amp; rangeData[i][1] == e.apellido)
{
nextRow = i
}
} p>
hoja.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
devuelve ContentService
.createTextOutput(JSON.stringify({ 'resultado': 'éxito', 'fila': nextRow }))
.setMimeType(ContentService.MimeType.JSON)
}
catch (e ) {
return ContentService
.createTextOutput(JSON.stringify({ 'resultado': 'error', 'error': e }))
. setMimeType(ContentService.MimeType.JSON)
}
finalmente {
lock.releaseLock()
}
}
Con el script anterior, se crea una nueva fila para cada entrada del formulario y la coincidencia nunca será verdadera. Entonces creo que hay algún problema con mi lógica en la búsqueda de coincidencias o la sintaxis que estoy usando para encontrar los valores del formulario y los datos de la hoja de cálculo. Entonces, ¿qué me estoy perdiendo?
¡Gracias!
EDITAR: Para ayudar a desarrollar este ejemplo, adjunto una captura de pantalla de una hoja de cálculo de muestra. Tal como está, si un usuario envía el formulario con el nombre "Bob" y el apellido "Belcher", quiero que los datos restantes del formulario sobrescriban las filas existentes con esos nombres.
Pero si los campos Nombre y Apellido no coinciden en la hoja de cálculo, agregue una nueva fila.
El script anterior siempre agrega nuevas filas incluso si existen filas existentes. Intenté usar la lógica de esta pregunta para lograr el resultado que quería, pero esto provocó que el script fallara por completo (sin filas actualizadas ni filas agregadas). También intenté usar los pasos lógicos descritos en este video, que usa los datos del formulario "indexOf" en lugar de un bucle for con una declaración if para encontrar una coincidencia. Esta solución tampoco funciona