Google 用于重新排列行的工作表脚本
Google Sheets Script to Rearrange Rows
正在尝试创建一个 Google Sheet 允许使用下拉选择选项选择行优先级。
这是我正在尝试构建的基本算法:
1 用户使用下拉菜单更改行的优先级(注意:该部分工作正常)
2 编辑后的行会根据新的优先级向上移动(注意:这部分没问题)
3 所有其他行将根据编辑的单元格更改它们的数字(例如,编辑的单元格最初是 13 并更改为 4。我希望旧的 4 变为 5,从 5 到 12 的所有内容增加 1 )
我遇到的问题是当单元格更改为数字 4 时,它位于旧数字 4 之下 - 因此 for 循环不起作用。
有人做过类似的事情或有什么建议吗?
function onEdit(event) {
var activeSheet = SpreadsheetApp.getActiveSheet();
var editedCell = activeSheet.getActiveCell();
var columnToSortBy = 1;
var tableRange = "A2:M22";
if(editedCell.getColumn() == columnToSortBy){
var priority = editedCell.getValue();
var range = activeSheet.getRange(tableRange);
var time = new Date();
time = Utilities.formatDate(time, "GMT", "HH:mm:ss");
var nextCell = editedCell.offset(0, 13);
nextCell.setValue(time);
range.sort({ column: columnToSortBy, ascending: true});
}
}
function rearrangeRows() {
var i;
var ss = SpreadsheetApp.getActiveSheet();
var startRow = 1;
var endRow = ss.getLastRow();
var getRange = ss.getDataRange();
var getRow = getRange.getRow();
var testPriority = 3;
var cell = ss.getRange("A4");
var cellValue = cell.getValue();
if (cellValue > number) {
Logger.log(cellValue);
}
Logger.log(number);
// for(i; i > )
}
我认为您可以在对电子表格进行排序之前,将我在下面编写的代码放入 onEdit 函数中。这应该增加优先级高于您刚刚设置的优先级的所有单元格的值,忽略您刚刚更改的单元格。当您降低一行的优先级时,您可能需要稍微调整它才能工作,因为您需要降低该行的原始优先级和新优先级之间的所有行的优先级。
var endRow = activeSheet.getLastRow();
for (var i = 1; i <= endRow; i ++) {
var currentCell = activeSheet.getRange("A" + i);
if (currentCell.getValue() > priority && i != editedCell.getRow()) {
currentCell.setValue(currentCell.getValue() + 1)
}
}
正在尝试创建一个 Google Sheet 允许使用下拉选择选项选择行优先级。
这是我正在尝试构建的基本算法:
1 用户使用下拉菜单更改行的优先级(注意:该部分工作正常)
2 编辑后的行会根据新的优先级向上移动(注意:这部分没问题)
3 所有其他行将根据编辑的单元格更改它们的数字(例如,编辑的单元格最初是 13 并更改为 4。我希望旧的 4 变为 5,从 5 到 12 的所有内容增加 1 )
我遇到的问题是当单元格更改为数字 4 时,它位于旧数字 4 之下 - 因此 for 循环不起作用。
有人做过类似的事情或有什么建议吗?
function onEdit(event) {
var activeSheet = SpreadsheetApp.getActiveSheet();
var editedCell = activeSheet.getActiveCell();
var columnToSortBy = 1;
var tableRange = "A2:M22";
if(editedCell.getColumn() == columnToSortBy){
var priority = editedCell.getValue();
var range = activeSheet.getRange(tableRange);
var time = new Date();
time = Utilities.formatDate(time, "GMT", "HH:mm:ss");
var nextCell = editedCell.offset(0, 13);
nextCell.setValue(time);
range.sort({ column: columnToSortBy, ascending: true});
}
}
function rearrangeRows() {
var i;
var ss = SpreadsheetApp.getActiveSheet();
var startRow = 1;
var endRow = ss.getLastRow();
var getRange = ss.getDataRange();
var getRow = getRange.getRow();
var testPriority = 3;
var cell = ss.getRange("A4");
var cellValue = cell.getValue();
if (cellValue > number) {
Logger.log(cellValue);
}
Logger.log(number);
// for(i; i > )
}
我认为您可以在对电子表格进行排序之前,将我在下面编写的代码放入 onEdit 函数中。这应该增加优先级高于您刚刚设置的优先级的所有单元格的值,忽略您刚刚更改的单元格。当您降低一行的优先级时,您可能需要稍微调整它才能工作,因为您需要降低该行的原始优先级和新优先级之间的所有行的优先级。
var endRow = activeSheet.getLastRow();
for (var i = 1; i <= endRow; i ++) {
var currentCell = activeSheet.getRange("A" + i);
if (currentCell.getValue() > priority && i != editedCell.getRow()) {
currentCell.setValue(currentCell.getValue() + 1)
}
}