google-apps-script - Google 表格 – 在多个工作表的特定范围内自动排序 2 列
问题描述
我一直在寻找一种在 Google Sheet 上编写自动排序脚本的方法,该方法执行以下操作:
- 仅适用于特定范围 (A35:I911),但适用于主 Google 工作表中的所有工作表。
- 首先对 A 列(发布日期)进行排序,然后对 B 列(发布时间)进行排序。
- 在编辑该范围内的任何单元格时发生 (A35:I911)。
我尝试了以下代码,但它无法正常工作:
function onEdit(event) {
var postDate = 1;
var postTime = 2;
var sheet = event.source.getActiveSheet();
var tableRange = "A35:I911";
var range = sheet.getRange(tableRange);
range.sort([
{column: postDate, ascending: true},
{column: postTime, ascending: true}
]);
}
先感谢您!
以下是 Google 表格修订版的链接:https ://docs.google.com/spreadsheets/d/1NUy6aY-lEA66UFXg4Yx4mXsTgFvj5g2Dhv4jToYsQnw/edit?usp=sharing )
解决方案
修改点:
- 尽管从您的问题来看,不幸的是,我无法理解
but it will not work properly
,当我看到您的示例电子表格时,似乎“2021 年 3 月”表中的最大行数为 910。我认为这可能是您的问题的原因。 - 当您想在编辑单元格“A35:I911”时运行脚本时,在您的情况下,我认为在编辑单元格“A35:B911”时,运行脚本可能是合适的。因为即使在编辑单元格“C35:I911”时,也不会运行排序。
- 而且,从您的示例脚本中,我认为您可能不想在编辑“概览”表时运行该脚本。
当以上几点反映到您的脚本时,它变成如下。
修改后的脚本:
function onEdit(event) {
var range = event.range;
var sheet = event.source.getActiveSheet();
if (sheet.getSheetName() == "Overview" || range.rowStart < 35 || range.rowStart >= 911 || range.columnStart > 2) return;
var postDate = 1;
var postTime = 2;
var tableRange = sheet.getMaxRows() < 911 ? "A35:I" + sheet.getLastRow() : "A35:I911";
var range = sheet.getRange(tableRange);
range.sort([
{column: postDate, ascending: true},
{column: postTime, ascending: true}
]);
}
- 当您要运行脚本时,请编辑工作表中除“概述”之外的单元格“A35:I911”。
- 当要运行脚本时单元格“A35:I911”,请修改
range.columnStart > 9
.
参考:
推荐阅读
- android - 如何创建微调器列表?
- ubuntu - 如何在 Ubuntu 上安装 libthrift-dev?
- c# - 在 Unity 中导出 android 源代码时出错
- javascript - 在不同域之间共享数据
- java - 如何将 eventListener 的结果存储为对象?
- jquery - Wordpress Gutenberg HTML 阻止对 Ajax 请求的限制
- kotlin - as 和 as 有什么区别?实施者与实施者?
- dart - 错误:参数类型“()→Null”不能分配给参数类型“(Null)→FutureOr
' - ubuntu - 在 ubuntu 上编译 bochs 失败
- ios - 在滑动动画上使用 containerview 创建自定义标签栏