【问题标题】:Automatic sorting code is google script is not working as intended自动排序代码是谷歌脚本没有按预期工作
【发布时间】:2021-05-06 03:29:04
【问题描述】:

当列 (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 } );
  }

} 

感谢您的帮助。

【问题讨论】:

  • 您的 cmets 和您的脚本彼此不同意您所说的对第 24 列的 Col X 进行编辑,并且在您的脚本中排序仅发生在第 8 列中的编辑。它不会使感觉。
  • @MetaMan 好像你误会了我。我只使用 X 和 Y 作为参考,而不是实际的列。应该在我的帖子中解释这一点。很抱歉造成混乱。
  • 好消息是其他人回答了这个问题。

标签: google-apps-script google-sheets spreadsheet


【解决方案1】:

onEdit触发的排序

您希望在更新列中的值时对其进行排序。排序顺序将由另一列中的值确定,该值由公式计算,基于更改的列。

所以如果你有这样一张桌子:

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 会有一个小的延迟,因此如果您在未运行时选择另一个单元格,则脚本可能无法按预期工作。您需要从事件对象中获取范围。

修改后的脚本

我看不到您的数据,所以我制作了一个样本表,其中的数据如上面使用RAND 的示例所示。

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

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

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

参考

【讨论】:

  • 我的第一个代码是正确的,我发现问题出在公式本身,该公式用于从下面的行而不是同一行获取计算,这使事情变得一团糟。但是非常感谢您的建议。我按照你的建议调整了我的代码,因为我的代码并没有正确完成。
猜你喜欢
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 2019-06-16
  • 2015-06-23
  • 1970-01-01
  • 2012-02-06
相关资源
最近更新 更多