Tengo una hoja de Google con un temporizador configurado para las 5 am y todos los días quiero que la hoja:
Creo que estoy cerca ... Simplemente no puedo entender cómo decirle que vuelva a ejecutar la parte "SI" si todavía encuentra "ERRORES". ¡Cualquier entrada es apreciada!
Aquí hay un enlace al archivo -> https://docs.google.com/spreadsheets/d/1GFN3tXRlqxo9J9iNpZMPk-e-WlNGVjJ4zSqZ1_aEE_U
function HardKeyValues() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Players'), true); SpreadsheetApp.flush(); Utilities.sleep(10000); var findVal = spreadsheet.getRange('U:U').getValue() if(findVal.match('ERROR')){ SpreadsheetApp.flush(); Utilities.sleep(10000)} else{ spreadsheet.getRange('W:W').activate(); spreadsheet.getRange('V:V').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);} }Pero si lo hiciera, lo escribiría así:
function HardKeyValues() { const ss = SpreadsheetApp.getActive(); const psh = ss.getSheetByName('Players'); SpreadsheetApp.flush(); Utilities.sleep(10000); const vs = psh.getRange('U1:U' + psh.getLastRow()).getDisplayValues().flat(); if (vs.find(e => e.includes("ERROR"))) { SpreadsheetApp.flush(); Utilities.sleep(10000); } else { sh.getRange("V1:V" + sh.getLastRow()).copyTo(sh.getRange("W1:W" + sh.getLastRow(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false)); } }El uso de rangos indeterminados como "W:W" a menudo conduce a muchos valores nulos al final de la matriz.
¿Qué pasa con el uso de un ciclo while?
function HardKeyValues() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Players'), true); SpreadsheetApp.flush(); Utilities.sleep(10000); var findVal = spreadsheet.getRange('U:U').getValue() while (findVal.match('ERROR')){ SpreadsheetApp.flush(); Utilities.sleep(10000)} findVal = spreadsheet.getRange('U:U').getValue() } spreadsheet.getRange('W:W').activate(); spreadsheet.getRange('V:V').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); }Tal vez podría intentar usar un bucle for, solo asegúrese de tener una variable que eventualmente pueda cumplir con el requisito para que el bucle for se detenga, de lo contrario, se convertirá en un bucle para siempre;)