Google 表格脚本:根据下拉列表移动行并按日期自动排序
Google Sheets Script: Move row based on dropdown AND auto-sort by date
我正在 Google 工作表 (like this) 中创建团队任务跟踪器,其中包含任务名称、通过下拉列表显示的任务状态(新建、进行中、已完成等)、截止日期和任务笔记。有一个包含所有新任务的选项卡,一个用于处理中任务、已完成任务等的选项卡。我希望 行任务数据从新选项卡移 到适当的选项卡时下拉状态已选择为“新建”以外的任何状态,我希望任务数据的每个选项卡 按截止日期 排序。我已经能够单独实现这两件事,但我无法让它们一起工作。
根据所选的状态(下拉项:新建、进行中、已完成等),将数据行移动到 sheet 中的相应选项卡。为此,我使用了以下脚本,该脚本可在状态更改时将行移动到目标 sheet 的底行:
function onEdit(e) {
const src = e.source.getActiveSheet();
const r = e.range;
if (r.columnStart != 2 || r.rowStart == 1 || e.value == src.getName()) return;
const dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(e.value);
src.getRange(r.rowStart,1,1,5).moveTo(dest.getRange(dest.getLastRow()+1,1,1,5));
}
按截止日期列出任务(在每个选项卡中),从顶部最快到期的项目到底部最晚到期的项目。为此,我使用了如下所示的 this resource 并且脚本对我有用,但我无法弄清楚如何将这个脚本或类似的东西与现有脚本结合起来,我必须根据已选择下拉项。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1"); // SHEET NAME
var range = sheet.getRange("A2:Z"); // RANGE TO SORT
function onEdit(e) {
range.sort([{column: 2, ascending: true}]); // COLUMN NUMBER TO SORT
}
如果能根据下拉项自动移动行并按截止日期自动排序数据,我将不胜感激!非常感谢。
您可以在移动行后添加 sort() 方法。
试试这个:
function onEdit(e) {
const src = e.source.getActiveSheet();
const r = e.range;
if (r.columnStart != 2 || r.rowStart == 1 || e.value == src.getName()) return;
const dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(e.value);
src.getRange(r.rowStart,1,1,5).moveTo(dest.getRange(dest.getLastRow()+1,1,1,5));
src.deleteRow(r.rowStart);
dest.getDataRange().offset(1, 0).sort({column: 4, ascending: true});
}
示例:
输出:
参考:
我正在 Google 工作表 (like this) 中创建团队任务跟踪器,其中包含任务名称、通过下拉列表显示的任务状态(新建、进行中、已完成等)、截止日期和任务笔记。有一个包含所有新任务的选项卡,一个用于处理中任务、已完成任务等的选项卡。我希望 行任务数据从新选项卡移 到适当的选项卡时下拉状态已选择为“新建”以外的任何状态,我希望任务数据的每个选项卡 按截止日期 排序。我已经能够单独实现这两件事,但我无法让它们一起工作。
根据所选的状态(下拉项:新建、进行中、已完成等),将数据行移动到 sheet 中的相应选项卡。为此,我使用了以下脚本,该脚本可在状态更改时将行移动到目标 sheet 的底行:
function onEdit(e) { const src = e.source.getActiveSheet(); const r = e.range; if (r.columnStart != 2 || r.rowStart == 1 || e.value == src.getName()) return; const dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(e.value); src.getRange(r.rowStart,1,1,5).moveTo(dest.getRange(dest.getLastRow()+1,1,1,5)); }
按截止日期列出任务(在每个选项卡中),从顶部最快到期的项目到底部最晚到期的项目。为此,我使用了如下所示的 this resource 并且脚本对我有用,但我无法弄清楚如何将这个脚本或类似的东西与现有脚本结合起来,我必须根据已选择下拉项。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Sheet1"); // SHEET NAME
var range = sheet.getRange("A2:Z"); // RANGE TO SORT
function onEdit(e) {
range.sort([{column: 2, ascending: true}]); // COLUMN NUMBER TO SORT
}
如果能根据下拉项自动移动行并按截止日期自动排序数据,我将不胜感激!非常感谢。
您可以在移动行后添加 sort() 方法。
试试这个:
function onEdit(e) {
const src = e.source.getActiveSheet();
const r = e.range;
if (r.columnStart != 2 || r.rowStart == 1 || e.value == src.getName()) return;
const dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(e.value);
src.getRange(r.rowStart,1,1,5).moveTo(dest.getRange(dest.getLastRow()+1,1,1,5));
src.deleteRow(r.rowStart);
dest.getDataRange().offset(1, 0).sort({column: 4, ascending: true});
}
示例:
输出:
参考: