Google Apps Script - Как написать код для ранжирования столбца данных
Используя Google Forms, я собираю данные для учителей, чтобы использовать их при определении учеников, которые имеют право на получение услуг по титулу 1. Форма подает данные в Google Sheets, и я хочу автоматизировать процесс суммирования баллов по категориям, а затем ранжировать их в каждой категории. У меня есть этот код, который копирует резюме из одного столбца в другой, но затем мне нужно ранжировать столбец, и вот где я застрял. Может кто-нибудь помочь мне понять, как ранжировать данные? Я думаю, что мне может понадобиться цикл for - но я застрял. Спасибо
function CopyRankData()
{
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var SourceSheet=spreadSheet.getSheetByName('Ranking')
var srcRange = SourceSheet.getRange('D1:D31');
var destSheet = spreadSheet.getSheetByName('Ranking');
var destRange = destSheet.getRange('I1:I31');
srcRange.copyTo(destRange);
--Need to Rank the column ---[Link to spreadsheet][1]
}
0 ответов
Ниже представлена довольно простая утилита, которая может правильно эмулировать RANK
формула (включая ранжирование по возрастанию и убыванию). Если вам нужно отсортировать его по другому столбцу диапазона или использовать другой компаратор, его легко изменить и сделать более универсальным.
Что вам нужно сделать, так это отсортировать копию значений целевого столбца по некоторым критериям, получить результирующий индекс и увеличить его на 1
поскольку индексы массива 0
-на основе.
/**
* @summary ranks a range by first column
* @param {number[][]} range
* @param {(1|0)} [ascending]
* @return {number[][]}
* @customfunction
*/
const rankRange = (values, ascending = 0) => {
try {
const rows = values.map(v => v).sort((a, b) => {
const aParsed = parseFloat(a[0]);
const bParsed = parseFloat(b[0]);
return ascending ?
aParsed - bParsed :
bParsed - aParsed;
});
return values.map((row) => {
return rows.findIndex(r => r[0] === row[0]) + 1;
});
} catch (error) {
console.warn(`failed to rank column: ${error}`);
return [[]];
}
};
Убедитесь, что в вашем проекте включена среда выполнения V8, чтобы она работала (или перед использованием перенесите ее в синтаксис ES5).