自动排序脚本移动的数据

时间:2019-11-06 04:17:41

标签: google-apps-script

我的问题是,当我标记为“完成”时,数据已通过脚本从一张工作表移到另一张工作表。我要在“已完成”表中对数据进行排序。我已经有一个自动排序脚本,该脚本仅在调试时才起作用,甚至在编辑时也不起作用(在任何地方都尝试编辑),更不用说将数据移动到工作表时了。

我希望每当数据移动到新工作表时都可以自动排序(我不认为它的onEdit功能是这样)

我不是程序员,并且对Google Apps脚本还很陌生。我偶尔会涉足代码,因为我发现它很有趣,所以我什至不知道从哪里开始获得我想要的结果。

这是自动排序,

function AutoSortOnEdit() {
  var sheetNames = ["Complete"];

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  sheetNames.forEach(function(name) {
    var sheet = ss.getSheetByName(name);
    var range = sheet.getRange(4, 1, sheet.getLastRow() - 1, 
sheet.getLastColumn());
    range.sort({column: 2, ascending: true});
  });
}

编辑:我意识到我正在为多个工作表使用脚本。我将其更改为一张纸,尽管有相同的问题。

function AutoSortOnEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("Completed Returns");
    var range = sheet.getRange(4, 1, sheet.getLastRow() - 1, 
sheet.getLastColumn());
    range.sort({column: 2, ascending: true});
}

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

我设法通过将2个脚本放到1个函数下来使其正常工作,如下所示。我不知道如何在调用多个函数的同时使事件函数运行,所以我只是将它们组合在一起。在两个“}”括号的上方是移动脚本,在其下方是“自动”排序。

function onEdit(e) {
  var ss = e.source;
  var s = ss.getActiveSheet();
  var r = e.range;

  var actionCol = 24;
  var nameCol = 24;
  var rowIndex = r.getRowIndex();
  var colIndex = r.getColumnIndex();

  var colNumber = s.getLastColumn();

  if (e.value == "TRUE" && colIndex == actionCol) {
    var targetSheet = ss.getSheetByName("Completed Returns");
    if (ss.getSheetByName("Completed Returns")) { 
      var targetSheet = ss.getSheetByName("Completed Returns");
      var targetRange = targetSheet.getRange(targetSheet.getLastRow()+1, 1, 1, colNumber);
      var sourceRange = s.getRange(rowIndex, 1, 1, colNumber); 
      sourceRange.copyTo(targetRange);
      s.deleteRow(rowIndex);
    }
  }
  var sheet = ss.getSheetByName("Completed Returns");
    var range = sheet.getRange(4, 1, sheet.getLastRow() - 1, sheet.getLastColumn());
    range.sort({column: 2, ascending: true});
}

感谢大家的回应!

答案 1 :(得分:0)

您可以彼此添加功能

function AutoSortOnEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Completed Returns');
  var range = sheet.getRange(
    4,
    1,
    sheet.getLastRow() - 1,
    sheet.getLastColumn()
  );
  range.sort({ column: 2, ascending: true });
}

function copyData() {}

function userActionRun() {
  copyData();
  AutoSortOnEdit();
}

现在您可以将其绑定到EDIT事件

function onEdit(){
  userActionRun();
}

答案 2 :(得分:0)

您可以使用Click here函数对数据集进行排序。

如果具有将行标记为已完成时将数据从一张纸移到另一张纸的功能,则可以在该行的末尾添加一行以对其进行排序。

您还可以创建一个Sort,根据您的参数对整个工作表进行排序。与过滤器不同,FilterViews在会话之间保存。