Google apps script 按脚本移动的自动排序数据

Google apps script 按脚本移动的自动排序数据,google-apps-script,Google Apps Script,我的问题是,当标记为“完成”时,通过脚本将数据从一个工作表移动到另一个工作表。在“已完成”表中,我要对数据进行排序。我已经有了一个Autosort脚本,它只在调试时起作用,甚至在编辑(尝试到处编辑)时也不起作用,更不用说数据移动到工作表时了 我希望能够在数据移动到新工作表时自动排序(我不认为这是onEdit功能?) 我不是一个程序员,我对谷歌应用程序脚本还相当陌生。我只是偶尔涉猎一下代码,因为我觉得它很有趣,所以我甚至不知道从哪里开始得到我想要的结果 这是自动分拣, 编辑:我意识到我正在使用

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

我希望能够在数据移动到新工作表时自动排序(我不认为这是onEdit功能?)

我不是一个程序员,我对谷歌应用程序脚本还相当陌生。我只是偶尔涉猎一下代码,因为我觉得它很有趣,所以我甚至不知道从哪里开始得到我想要的结果

这是自动分拣,

编辑:我意识到我正在使用一个脚本来处理多张工作表。我把它改成了一张纸,但问题是一样的

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 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();
}
现在,您可以将其绑定到编辑事件

function onEdit(){
  userActionRun();
}
您可以使用该函数对数据集进行排序

如果有一个函数可以在行标记为完成时将数据从一个工作表移动到另一个工作表,则可以在该行的末尾添加一行对其进行排序


您还可以创建一个基于参数对整个图纸进行排序的。与过滤器不同,FilterViews是在会话之间保存的。

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

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

谢谢大家的回复

我会按照先发生什么事件的顺序来写,还是说“function userActionRun”就是为了这个?所以这对我来说不起作用,因为我的移动脚本是基于事件的。通过组合这两个脚本,我成功地使其工作。是的,
userActionRun
是一个传送带
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});
}