将空单元格排在最前面

时间:2014-09-17 19:12:03

标签: google-apps-script google-sheets

我正在制作一张google工作表,以组织我校的更衣柜分配系统。对于未分配的储物柜,学生/成绩/专业/等。细胞是空白的。理想情况下,我需要一个功能,它将对储物柜进行排序,将所有未分配的(空白学生单元格)推送到工作表的顶部。但是,无论我是按升序还是降序排序,谷歌api似乎都会忽略任何空白单元格并将它们推到底部。一旦这张纸完成,它将有近1000个储物柜,所以每次教师想要分配一个开放式储物柜时,必须完全向下滚动是非常烦人的。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

由于使用表单本机函数似乎很难,我尝试了数组方法,并提出了以下似乎按预期工作的代码:

这些函数可以带一个参数(列号 - 从0开始 - 你想要排序)并在G上设置一个默认值,这样你就可以从没有参数的菜单中调用它。

TEST SHEET HERE (test sorts on column A)

function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "Sort Sheet",
    functionName : "sortSheet"
  }];
  sheet.addMenu("Sort Sheet", entries);
};

function sortSheet(col){
  col = col || 6;// default to col G 
  Logger.log(col);
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getDataRange();
  var data = range.getValues();
  var headers = data.shift();
  data.sort(spaces);
  function spaces(x,y){
    var a = x[col];// choose the cell in the column
    var b = y[col];
    var comp = (a==''?"_":a)>(b==''?"_":b)?1:-1;// sort replacing empty with underscore
    return comp;
  }
  data.unshift(headers);// put back headers in place
  range.setValues(data);//update sheet
}