google-apps-script - 自动排序代码是谷歌脚本没有按预期工作
问题描述
当列(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
您希望在更新列中的值时对其进行排序。排序顺序将由另一列中的值确定,该值基于更改的列通过公式计算。
因此,如果您有这样的表:
一个 | 乙 |
---|---|
1 | =兰德()*A1 |
2 | =兰德()*A1 |
3 | =兰德()*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 列中的值进行排序。
参考
推荐阅读
- flutter - 无法在初始化程序中访问实例成员“myString”。文本编辑控制器
- parsec - Parsec 使用纸空间与 React Js 集成?
- angular - 如何通过 ESLint 控制开发人员对组件的属性输入?
- scenekit - 如何使用纹理将 fbx 转换为 usdz
- django - 如何使用 Docker 设置 Django + RabbitMQ + Celery?
- python - Python多处理,从没有缓冲区的远程RTSP相机读取
- android - Gradle 构建在根文件夹中找不到 apikey.properties 文件
- ffmpeg - 从 4 通道声卡录制 2 个通道
- ubuntu - 无法删除虚拟主机 openlitespeed
- anaconda - Anaconda3 RunTime 错误 --- qt.qpa.plugin: 无法在“”中加载 Qt 平台插件“windows”,即使已找到