Google Sheets选中单元格内容互换脚本优化需求
需求:Google Sheets多工作表学生ID互换脚本
我是一名小学音乐教师,要管理29个班级的座位表,用Google Sheets制作,常需要调整座位。我通过单元格里的学生ID,引用另一工作表的数据自动填充姓名等信息,现在想写个脚本实现选中两个单元格的学生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; }
更新于2023年8月20日
之前试用了@Cooper提供的代码,效果很好,但该代码只适用于特定工作表,我需要修改成获取当前活动工作表而非指定名称的版本,这样能在多个工作表标签页上运行。
补充背景:
- 数据文件中A列为学生编号,座位表文件通过INDEX和MATCH函数,根据单元格里的学生编号从数据表获取对应姓名。
- 互换功能直接交换座位表中引用单元格的学生编号,就能实现姓名“换位”。
修改后的通用版脚本
function swapSelectedCells() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const activeSheet = ss.getActiveSheet(); // 获取当前活动工作表 const selectedRanges = activeSheet.getActiveRangeList().getRanges(); // 仅处理选中两个单个单元格的情况 if (selectedRanges.length !== 2 || selectedRanges[0].getNumRows() !== 1 || selectedRanges[0].getNumColumns() !== 1 || selectedRanges[1].getNumRows() !== 1 || selectedRanges[1].getNumColumns() !== 1) { SpreadsheetApp.getUi().alert("请选中两个单个单元格进行互换!"); return; } // 获取两个单元格的值 const cell1Value = selectedRanges[0].getValue(); const cell2Value = selectedRanges[1].getValue(); // 互换值 selectedRanges[0].setValue(cell2Value); selectedRanges[1].setValue(cell1Value); }
使用说明:
- 在Google Sheets中打开脚本编辑器,替换原有代码为上述内容
- 保存后可通过“扩展程序”>“自定义功能”运行该脚本,或添加到工具栏快速访问
- 选中两个包含学生ID的单元格,运行脚本即可完成互换,关联的姓名等信息会自动更新
内容的提问来源于stack exchange,提问作者Peter Conniff
相关产品推荐
相关产品推荐

