我正在尝试使用Google表格对元素列表进行排名。此列表会不断更新,因此如果我已经对数百个元素进行排名并且需要对10个新元素进行排名,那么更新列表可能会很麻烦。我认为不必编写每次重新排序的宏都更容易,而不必每次都重新排序某些先前排名的元素(无论是手动还是使用公式)。
1-元素A
2-元素B
3-元素C
新元素:元素D
例如,如果我希望元素D排名第二,则需要将元素B更改为3,将元素C更改为4。这在处理数百个元素时非常繁琐。
到目前为止,这是我的代码,但是我陷入了getRange行中。排名在A列中。
function RankElements() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var r = s.getActiveCell();
var v1 = r.getValue();
var v2 = v1 + 1
var v3 = v2 + 1
var lastRow = s.getLastRow();
s.getRange(1,v2).setValue(v2);
s.getRange(1,v3).autoFill(s.getRange(1,v3+":"+1,lastRow), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
s.getRange(1,v3+":"+1,lastRow).copyTo(s.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
s.getFilter().sort(1, true);
};
您可以执行以下操作:
1
添加到当前排名。可能是这样的:
function RankElements() {
const sheet = SpreadsheetApp.getActiveSheet();
const cell = sheet.getActiveCell();
const row = cell.getRow();
const newRanking = sheet.getActiveCell().getValue();
const firstRow = 2;
const columnA = sheet.getRange(firstRow, 1, sheet.getLastRow() - 1).getValues()
.map(row => row[0]); // Retrieve column A values
for (let i = 0; i < columnA.length; i++) { // Iterate through column A values
if (columnA[i] >= newRanking && (i + firstRow) != row) {
sheet.getRange(firstRow + i, 1).setValue(columnA[i] + 1); // Add 1 to ranking
}
}
sheet.getFilter().sort(1, true);
};