【问题标题】:Google Apps Script to sort empty cells in a particular column to the top用于将特定列中的空单元格排序到顶部的 Google Apps 脚本
【发布时间】:2020-06-30 05:43:16
【问题描述】:

我在 Google 表格中有一个失物招领登记册,其中包含 A:I 列。找到项目后,用户将项目添加到工作表中,因此随着时间的推移,工作表将具有大量行。这是我的工作表样本:

我在第 1 行有几个按钮,每个按钮后面都有 GAS,以便用户可以对特定列进行排序。

H 列填充了一个结束日期,我想要一个带有 GAS 的按钮来首先对 G 列进行排序,“到期日期”升序,它将始终被填充,其次是 H 列,“结束日期”,以便空单元格位于顶部,即所有尚未结束的项目都位于工作表顶部。我有以下 GAS,但这会将所有空单元格发送到底部。

//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});
 }

有什么办法吗?

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    我相信你的目标如下。

    • 您希望在排序完成后将“H”列为空白的行放在A3:I 范围的顶部。

    对于这个,这个答案怎么样?

    在这个答案中,我想提出以下流程。

    1. 对电子表格进行排序。
      • 在这种情况下,将使用您的脚本。
    2. A3:I 范围内检索值。
    3. “H”列中包含空单元格的行被置于值的顶部。
    4. 将处理后的值放入电子表格。

    示例脚本:

    当你的脚本被修改后,变成如下。

    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);
    }
    

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多