Actualmente estoy trabajando en un script de Google Apps que básicamente restablecerá mi hoja de cálculo al final del día.
if(ss.getRange('D2').isBlank()){ ss.getRange('C2').moveTo(ss.getRange('D2')); } if(ss.getRange('D3').isBlank()){ ss.getRange('C3').moveTo(ss.getRange('D3')); } if(ss.getRange('D4').isBlank()){ ss.getRange('C4').moveTo(ss.getRange('D4')); } if(ss.getRange('D5').isBlank()){ ss.getRange('C5').moveTo(ss.getRange('D5')); }Eso es lo que estoy usando actualmente, pero como probablemente se dé cuenta, esto se complica rápidamente. ¿Hay una mejor manera de hacer esto?
Es mucho más eficiente trabajar con matrices en lugar de valores individuales. De esta manera, solo tiene que obtener y configurar los datos una vez.
En el siguiente script, ajuste el nombre de la hoja y el rango deseado. El rango C2:D10 asume que la columna D es parte de la instrucción if y C es la columna en la que desea obtener los valores si D está vacía.
function myFunction() { const sheetName = 'Sheet1'; // define the name of the sheet const range = 'C2:D10'; // define the range const sss = SpreadsheetApp.getActive(); const ss = sss.getSheetByName(sheetName); const data = ss.getRange(range).getValues(); data.forEach((r,i)=>{ data[i][1] = r[1] ==''? r[0] : r[1]; }) ss.getRange(range).setValues(data); } function lfunko() { const ss = SpreadsheetApp.getActive(); ['D2', 'D3', 'D4', 'D5'].forEach(r => { let rg = ss.getRange(r); if (rg.isBlank()) { ss.getRange(r).offset(0, -1).moveTo(rg) } }); }Si bien es cierto, ciertamente hay formas más eficientes de hacer esto. Sentí que la interfaz de usuario se mejoró porque todo lo que tiene que hacer es agregar algunos rangos más a la matriz y no es necesario que sean contiguos. Por supuesto, si difieren el rango y las metodologías, entonces tendría que modificar el script.