Skip to content

Instantly share code, notes, and snippets.

@xse
Created May 3, 2020 13:03
Show Gist options
  • Save xse/854885ab701026163e7e9b9af9147176 to your computer and use it in GitHub Desktop.
Save xse/854885ab701026163e7e9b9af9147176 to your computer and use it in GitHub Desktop.
function onEdit(e) {
const sheet = e.source.getActiveSheet();
const name = e.source.getActiveSheet().getName();
const col = e.range.getColumn(), row = e.range.getRow();
if(name == "Jita2BEANSTAR") {
// options mechanics (always one option true per column)
if(col == 7 && (row > 6 && row < 9)) { // SORT OPT
sheet.getRange(7, col, 2, 1).setValue("FALSE");
e.range.setValue("TRUE");
}
// checkboxes for sorting data by column
if(row == 12 && ((col > 1 && col < 9) || (col > 9 && col < 16))) {
// reset checkboxes
sheet.getRangeList(["B12:H12","J12:O12"]).setValue("FALSE");
e.range.setValue("TRUE");
// get sort order
let order;
(sheet.getRange("G7").getValue() == "TRUE") ? order = "ascending" : order = "descenting";
if(col != 8) { // easy sort
(order == "ascending")
? sheet.getRange("B13:O").sort({column: col, ascending: true})
: sheet.getRange("B13:O").sort({column: col, ascending: false});
} else { // %/ITEM column needs help to get sorted
let range = sheet.getDataRange();
let data = sheet.getRange(13, 2, range.getNumRows() - 12, range.getNumColumns() - 1).getValues();
const perToSort = value => {
let r;
(value === "") // hide down if empty value getting sorted
? (order == "ascending")
? r = 9999999999
: r = -9999999999
: (r = value[0] == "+")
? r = value.slice(1, -1)
: r = value.replace("%", "");
return Number(r);
};
data.sort((x,y) => { // here col 2 is data[0]
let xp = perToSort(x[col - 2]);
let yp = perToSort(y[col - 2]);
if(order == "ascending") {
return xp == yp ? 0 : xp < yp ? -1 : 1;
} else {
return xp == yp ? 0 : xp < yp ? 1 : -1;
}
});
sheet.getRange("B13:O").clear();
sheet.getRange(13, 2, data.length, data[0].length).setValues(data);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment