我是一名小学音乐老师,正在尝试在谷歌表格中创建座位表。我有 29 个部分要管理!我经常想改变座位表并寻找一种简化的方法来做到这一点。我有一个包含学生 ID 号的单元格,引用该单元格将学生姓名和相关信息从另一个电子表格填充到附近的单元格中。我想编写一个脚本,允许我交换两个学生编号。交换后,学生信息将重新填充相应的学生信息。我对编码相对较新,并且陷入困境,因为我知道序列中的步骤比我在尝试编写代码时意识到的要多。
我发现这段代码可以获取两个选定单元格的引用,但不知道如何从这里获取它。我知道我需要获取单元格内容然后以某种方式交换它们。有想法吗? 谢谢,彼得
function getSelectedRange_NonContiguous() {
const sheet = SpreadsheetApp.getActive().getActiveSheet();
const selected = sheet.getActiveRangeList().getRanges();
// an array of selected ranges
const notations = selected.map(rng=>rng.getA1Notation());
// log them:
notations.forEach(nt=>console.log(nt));
return notations;
}
function swap() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName("Sheet0");
const list = sh.getActiveRangeList();
const rgl = breakUpRangeList(ss, sh, list)
let v = rgl.getRanges().flatMap(r => r.getValue()).reverse();
rgl.getRanges().map((r, i) => r.setValue(v[i]));
rgl.getRanges().forEach((r, i) => r.setValue(v[i]));
}
function breakUpRangeList(ss = SpreadsheetApp.getActive(), sh = ss.getSheetByName("Sheet0"), rgl) {
let b = [];
rgl.getRanges().forEach(rg => {
rg.getValues().forEach((r, i) => {
let row = rg.getRow() + i;
r.forEach((c, j) => {
let col = rg.getColumn() + j;
b.push(sh.getRange(row, col).getA1Notation())
})
})
})
b = [...new Set(b)];
Logger.log(JSON.stringify(b));
return sh.getRangeList(b);
}