自动排序代码为 google 脚本未按预期工作

Automatic sorting code is google script is not working as intended

当列 (Col X) 中发生任何编辑时,我正在尝试对我的电子表格进行排序;根据在 (Col X) 中输入的新值,一个简单的公式计算出 (Col Y) 中的值。

我正在尝试根据该公式的输出对电子表格行进行排序(输出可以是 1 到 5 之间的任何数字)

代码无法正常工作,因为它似乎随机交换行,但是当我在 (Col Y) 而不是公式中手动插入数字时,它排序正确。

function onEdit(event){
  var sheet = event.source.getActiveSheet();
  var editedCell = sheet.getActiveCell();
  
  if(editedCell.getColumn() == 8)
  {   
    var range = sheet.getRange("A2:H25");
    range.sort( { column : 1, ascending: true } );
  }

} 

感谢您的帮助。

排序由 onEdit

触发

您想在更新时对列中的值进行排序。排序顺序由另一列中的值确定,该值根据更改的列通过公式计算。

所以如果你有这样的table:

A B
1 =RAND()*A1
2 =RAND()*A1
3 =RAND()*A1

当您更改 A 中的值时,B 会重新计算,脚本会采用 B 中重新计算的值并根据这些新值对其进行排序。

您当前的脚本

function onEdit(event){
  // Gets the active sheet (which may not be the edited sheet!)
  var sheet = event.source.getActiveSheet();
  // Gets the currently selected cell (which may not be the edited cell!)
  var editedCell = sheet.getActiveCell();
  
  // If the currently selected cell is in column 8 (Column H)
  if(editedCell.getColumn() == 8)
  { 
    // Select the range A2:H25 and sort it according to column 1
    var range = sheet.getRange("A2:H25");
    range.sort( { column : 1, ascending: true } );
  }
} 

虽然这有时可能有效,但通常 onEdit 会有一个小的延迟,因此如果您 select 另一个单元格而不是 运行,那么脚本可能无法按预期工作.您需要从事件对象中获取范围。

修改脚本

我看不到你的数据,所以我用上面使用 RAND 的示例中显示的数据制作了一个样本 sheet。

function onEdit(event){
  // Gets the edited range
  var editedRange= event.range;
  // Gets the edited sheet from the edited range
  var editedSheet= editedRange.getSheet()

  // Checks if the edit appeared in the right sheet and column
  if(editedRange.getColumn() == 1 && editedSheet.getName() == "Sheet1")
  { 
    // Sorts the range
    var range = editedSheet.getRange("A1:B5");
    range.sort( { column : 2, ascending: true } );
  }
} 

您需要更改 sheet 名称检查以及列号和范围(取决于您的数据)

现在,如果编辑 A 列,范围将根据 B 列中的值排序。

参考