Se trata de tres acciones similares necesarias en una hoja. Esperemos que esto termine siendo una pregunta útil en general.
Tengo un script que copia los valores de celdas arbitrarias en una hoja a una sola fila en otra hoja, cortesía de la respuesta de doubleunary a una pregunta anterior. Ahora necesito saber cómo restablecer la hoja de entrada para estar lista para otra entrada.
Algunas celdas deben estar en blanco, otras deben tener ceros y otras deben restablecerse a un valor de texto predeterminado, que se almacena en otra hoja para que pueda cambiarse fácilmente si es necesario.
El script para extraer los datos es este:
function submitDataOhSoMuchFaster() { const ss = SpreadsheetApp.getActive(); const values = ss.getActiveSheet().getRange('A1:Z13').getValues(); const entry = [ { column: 26, row: 12 }, // Z12 { column: 3, row: 2 }, // C2 { column: 14, row: 2 }, // N2 { column: 3, row: 10 }, // C10 { column: 6, row: 2 }, // F2 { column: 3, row: 4 }, // C4 { column: 5, row: 4 }, // E4 { column: 3, row: 5 }, // C5 { column: 5, row: 5 }, // E5 { column: 12, row: 5 }, // L5 { column: 12, row: 4 }, // L4 { column: 26, row: 13 }, // Z13 { column: 20, row: 4 }, // T4 { column: 20, row: 5 }, // T5 { column: 3, row: 6 }, // C6 ]; ss.getSheetByName('Master Log') .appendRow(entry.map(cell => values[cell.row - 1][cell.column - 1])); };Quiero saber si hay una manera elegante de revertir eso, y borrar o escribir ceros en un conjunto de celdas o rangos usando un método similar, y cómo escribiría de manera eficiente los valores de una matriz pequeña en una hoja de origen a celdas arbitrarias en la hoja de destino.
Como ejemplos, necesito:
Borrar C4, E4, J10:J14, etc.
Cero T5:T6, D12:D15
Copie el contenido de la celda AT2 en una hoja a F2 en la hoja de destino, AT3 a C10, etc. (todos los datos de origen para esto están en una sola columna, por lo que una matriz parece viable)
Sé cómo hacer esto de una manera prolongada que usa una tonelada de comandos Clear, getValue y setValue, pero ¿cómo lo hago de manera eficiente?
Editar:
El rango fuente para el tercer paso está aquí:
Y los objetivos están aquí:
La forma más elegante que se me ocurre es usar RangeList :
function updateSheet() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const targetSheet = ss.getSheetByName("TARGET"); targetSheet.getRangeList(["C4","E4","J10:J14"]).setValue(""); targetSheet.getRangeList(["T5:T6", "D12:D15"]).setValue(0); const sourceSheet = ss.getSheetByName("SOURCE"); const values = sourceSheet.getRange("AT2:AT" + sourceSheet.getLastRow()) .getValues().flat(); targetSheet.getRangeList(["F2","C10",...]).getRanges() .forEach((range,i) => range.setValue(values[i])); }