自动排序代码为 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 列中的值排序。
参考
当列 (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 列中的值排序。