He estado tratando de actualizar una fila existente con el mismo nombre, correo electrónico, etc. Mi problema es que no sé cómo agregar un número en el segundo WPM de prueba para el mismo usuario.
para ser más claros, el usuario envía un formulario y comienza la operación en la aplicación web, cuando finaliza la primera operación, los datos se envían a las hojas de Google y el usuario pasa a la segunda operación. Quiero enviar los datos de la segunda operación al usuario con el mismo nombre, correo electrónico.
app.post("/competition" , async (req, res) => { const {Name, Email, Number, Faculty, University, first_Trial_WPM , first_Trial_CPM} = req.body; const auth = new google.auth.GoogleAuth({ keyFile: "credentials.json", scopes: "https://www.googleapis.com/auth/spreadsheets", }); const client = await auth.getClient(); const googleSheets = google.sheets({version: "v4", auth: client}); const spreadsheetId = "###"; await googleSheets.spreadsheets.values.append({ auth, spreadsheetId, range: "Sheet1!A:G", valueInputOption: "USER_ENTERED", resource : { values: [ [Name, Email, Number, Faculty, University, first_Trial_WPM , first_Trial_CPM] ] } }) res.render("competition2"); }); app.post("/home" , async (req, res) => { const {Name, Email, Number, Faculty, University, second_Trial_WPM , second_Trial_CPM} = req.body; const auth = new google.auth.GoogleAuth({ keyFile: "credentials.json", scopes: "https://www.googleapis.com/auth/spreadsheets", }); const client = await auth.getClient(); const googleSheets = google.sheets({version: "v4", auth: client}); const spreadsheetId = "###"; await googleSheets.spreadsheets.values.update({ auth, spreadsheetId, range: "Sheet1!A2:I1000", valueInputOption: "USER_ENTERED", resource : { values: [ [Name, Email, Number, Faculty, University, second_Trial_WPM , second_Trial_CPM] ] } }) res.render('home'); });Creo que su objetivo es el siguiente.
En este caso, ¿qué tal la siguiente modificación?
En esta modificación, modifique su segundo script para poner los valores de second_Trial_WPM y second_Trial_CPM de la siguiente manera. Esta secuencia de comandos modificada utiliza las variables Name y Email , second_Trial_WPM y second_Trial_CPM .
const spreadsheetId = "###"; const range = "Sheet1"; const values = (await googleSheets.spreadsheets.values.get({spreadsheetId, range})).data; const rows = values.values.map(([a, b], i) => (a == Name && b == Email ? i + 1 : "")).filter(String); const data = rows.map((e) => ({values: [[second_Trial_WPM, second_Trial_CPM]], range: `'${range}'!H${e}`})); const res = await googleSheets.spreadsheets.values.batchUpdate({spreadsheetId, resource: {valueInputOption: "USER_ENTERED", data}}); En esta modificación, primero, los valores se recuperan de "Hoja1". Y recupere los números de fila para poner valores usando los valores de Name y Email . Y luego, second_Trial_WPM y second_Trial_CPM se colocan en las columnas "H" e "I" de la fila buscada.
Si se recuperan los mismos nombres en las columnas "A" y "B" de "Hoja1", los valores de second_Trial_WPM y second_Trial_CPM se colocan en esas filas.