Google Apps Script para ordenar las celdas vacías en una columna particular en la parte superior

2020-06-30 google-apps-script google-sheets

Tengo un registro de propiedad perdida en Hojas de cálculo de Google que tiene las columnas A: I. A medida que se encuentran los elementos, los usuarios agregan los elementos a la hoja para que con el tiempo la hoja tenga un número significativo de filas. Esta es una muestra de mi hoja:

Hoja de muestra

Tengo varios botones en la fila 1 que tienen GAS detrás de cada uno para que un usuario pueda ordenar una columna en particular.

La columna H se rellena con una fecha de conclusión y quiero un botón con GAS para ordenar primero la columna G, la "Fecha de caducidad" ascendente que siempre estará poblada y, en segundo lugar, la columna H, la "Fecha de conclusión" para que las celdas vacías estén en el arriba, es decir, todos los elementos que aún no se han concluido en la parte superior de la hoja. Tengo el siguiente GAS pero esto envía todas las celdas vacías al fondo.

//Sort Lost Property Register By Column H 
function SortLostPropertyRegisterByColumnH() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Lost Property Register');
  var range = sheet.getRange("A3:I");
  range.sort({column: 7, ascending: true});
  range.sort({column: 8, ascending: false});
 }

¿Hay alguna forma de hacer esto?

Answers

Creo que su objetivo es el siguiente.

  • Desea colocar las filas en las que la columna "H" está en blanco en la parte superior del rango A3:I después de finalizar la ordenación.

Para esto, ¿qué tal esta respuesta?

En esta respuesta, me gustaría proponer el siguiente flujo.

  1. Ordenar la hoja de cálculo.
    • En este caso, se utiliza su secuencia de comandos.
  2. Recupere los valores del rango A3:I
  3. Las filas con la celda vacía en la columna "H" se colocan en la parte superior de los valores.
  4. Ponga los valores procesados ​​en la hoja de cálculo.

Script de muestra:

Cuando se modifica su secuencia de comandos, se convierte en la siguiente.

function SortLostPropertyRegisterByColumnH() {
  // 1. Sort the Spreadsheet.
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Lost Property Register');
  var range = sheet.getRange("A3:I" + sheet.getLastRow());  // Modified
  range.sort({column: 7, ascending: true});
  range.sort({column: 8, ascending: false});
  
  // I added below script.
  // 2. Retrieve the values from the range `A3:I`.
  // 3. The rows with the empty cell at the column "H" are put to the top of values.
  SpreadsheetApp.flush();
  const values = range.getValues().reduce((o, e, i, a) => {
    o[e[7].toString() == "" ? "blanks": "values"].push(e);
    if (i == a.length - 1) o.result = o.blanks.concat(o.values);
    return o;
  }, {blanks: [], values: []});
  
  // 4. Put the processed values to the Spreadsheet.
  range.setValues(values.result);
}

Referencias

Related