You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:52:48