Tengo problemas con mi función setBackground() en el script de la aplicación. ¿Cómo puedo acelerarlo? Está funcionando pero la ejecución es muy lenta.
He escrito esto:
function changeColor(sheetName, startColorCol, sizeCellCol, totalCellCol) { var sSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName) for (z = startColorCol; z <= totalCellCol; z = z + sizeCellCol) { // As this is called onEdit() we don't want to perform the entire script every time a cell is // edited- only when a status cell is mofified. // To ensure this, before anything else we check to see if the modified cell is actually in the status column. if (sSheet.getActiveCell().getColumn() == z) { var row = sSheet.getActiveRange().getRow(); var value = sSheet.getActiveCell().getValue(); var col = "white"; // Default background color var colLimit = z; // Number of columns across to affect switch (value) { case "fait": col = "MediumSeaGreen"; break; case "sans réponse": col = "Orange"; break; case "proposition": col = "Skyblue"; break; case "Revisions Req": col = "Gold"; break; case "annulé": col = "LightCoral"; break; default: break; } if (row >= 3) { sSheet.getRange(row, z - 2, 1, sizeCellCol).setBackground(col); } } } }Vi que podría necesitar usar operaciones por lotes, pero no tengo idea de cómo hacer que funcione.
La cuestión es que necesito colorear un rango de celdas cuando se cambia el valor de una. Algunas ideas ?
Gracias
var value = sSheet.getActiveCell().getValue(); ). Por lo tanto, no tiene sentido usar un bucle.getActiveCell().getColumn() cada vez. Este objeto de evento se pasa a onEdit como un parámetro de forma predeterminada ( e en el ejemplo a continuación), pero debe pasarlo a su función changeColor como argumento.startColorCol y totalCellCol . function onEdit(e) { // ...Some stuff... changeColor(e, sheetName, startColorCol,sizeCellCol, totalCellCol); } function changeColor(e, sheetName, startColorCol,sizeCellCol, totalCellCol) { const range = e.range; const column = range.getColumn(); const row = range.getRow(); const sSheet = range.getSheet(); if (sSheet.getName() === sheetName && column >= startColorCol && column <= totalCellCol && row >= 3) { const value = range.getValue(); let col = "white"; // Default background color switch (value) { case "fait": col = "MediumSeaGreen"; break; case "sans réponse": col = "Orange"; break; case "proposition": col = "Skyblue"; break; case "Revisions Req": col = "Gold"; break; case "annulé": col = "LightCoral"; break; default: break; } sSheet.getRange(row, column-2, 1, sizeCellCol).setBackground(col); } }