我正在尝试为google电子表格编写一个简单的脚本。
代码应该如下工作:它应该是一个优先级列表,可以简单地编辑。例如,我有一个包含7个任务的列表,并希望更改一个任务的优先级。我的代码只是查找更大的值或eqauls然后我在单元格中放置的值并将它们递增1.所以最后一个任务优先级为8而我只有7个任务,因此在某处有一个间隙。
以下是我已经完成的事情:
function onEdit(e) {
var range = e.range;
var numRowsWithData = SpreadsheetApp.getActiveSheet().getDataRange().getNumRows();
var columnOfCellEdited = range.getColumn();
var cellEdited = range.getA1Notation();
if (columnOfCellEdited === 2) {
var valueOfEditedCell = range.getValue();
for (var i = 2; i <=numRowsWithData; i++) {
var rangeSheet = SpreadsheetApp.getActiveSheet().getDataRange();
var currentCell = rangeSheet.getCell(i, 2);
var currentValue = currentCell.getValue();
if(currentValue >= valueOfEditedCell) {
if(cellEdited == currentCell.getA1Notation()){
continue;
}
currentCell.setValue(currentValue+1);
};
}
};
};
这个脚本有效,但我有一些缺失的数字,因为每次我都加1到当前值。 如何编辑它以使所有数字按正确顺序排列,没有任何遗漏?
我知道这不是很复杂,但我现在也不知道:/
提前致谢!
答案 0 :(得分:0)
在澄清问题之后,完全重写了答案。
此函数读取所有现有优先级,包括新条目。任何大于新值的现有值都会增加1.数组用于存储每个值出现的行。然后循环该数组,跳过任何未定义的条目(缺少数字),并重新编号从1开始存在的那些。
这不会改变行的顺序。它只是重新编号第二列。
在可能的情况下,我保留原始代码,并在新位中重复使用您的方法。
function onEdit(e) {
var range = e.range;
var numRowsWithData = SpreadsheetApp.getActiveSheet().getDataRange().getNumRows();
var columnOfCellEdited = range.getColumn();
var cellEdited = range.getA1Notation();
if (columnOfCellEdited === 2) {
var valueOfEditedCell = range.getValue();
// get snapshot of current priorities
var priorityRows = [];
for (var row = 2; row <=numRowsWithData; row++) {
var rangeSheet = SpreadsheetApp.getActiveSheet().getDataRange();
var currentCell = rangeSheet.getCell(row, 2);
var currentValue = currentCell.getValue();
if(currentValue >= valueOfEditedCell && cellEdited !== currentCell.getA1Notation()) {
currentValue++;
};
priorityRows[currentValue] = row;
}
// renumber priorities
var newPriority = 1;
for (var i = 0; i < priorityRows.length; i++) {
var row = priorityRows[i];
if (row) {
var rangeSheet = SpreadsheetApp.getActiveSheet().getDataRange();
var currentCell = rangeSheet.getCell(row, 2);
currentCell.setValue(newPriority++);
}
}
}
}