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

如何不通过工作表名称引用活动工作表的前序工作表单元格?

如何引用活动工作表的前一个工作表单元格?

我需要引用当前活动工作表的前一个工作表中的单元格,但不想硬编码工作表名称——因为工作表的名称或位置可能会变动(比如把'Sheet 3'移到'Sheet 1'或'Sheet 2'前面),希望无论怎么调整,都能始终引用活动工作表的前一个工作表。

举个例子:如果当前活动表是'Sheet 2',就引用'Sheet 1'的A1单元格。

我尝试过的方法

我试过用索引来实现,但代码无法正常运行:

var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getIndex(); var num = SpreadsheetApp.getActiveSpreadsheet().getSheets()[sheet];

以及:

var sh = ss.getSheetByName(sheet);

另外,我会持续创建新工作表,希望新工作表能自动引用它的前一个工作表单元格,不用每次创建后手动修改代码。

最终解决方案

经过调整,我写出了可以正常工作的代码,现在设置了按钮,点击创建新工作表后,新表会自动插入引用前一个工作表的公式,确保值能同步更新:

function rollOver() {
  // 获取活动工作表
  var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  // 获取活动工作表的索引
  var index = activeSheet.getIndex(); 

  // 获取当前表格的所有工作表
  var allSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();

  // 索引减2得到前一个工作表(因为工作表索引从1开始,数组下标从0开始)
  var prevSheet = allSheets[index - 2];

  // 获取前一个工作表的名称
  var prevSheetName = prevSheet.getSheetName();

  // 获取需要引用的单元格A1标识
  var rolloverCell = prevSheet.getRange("AW61").getA1Notation();
  var savingsCell = prevSheet.getRange("BE28").getA1Notation();

  // 给活动工作表的指定单元格插入引用公式
  activeSheet.getRange("AQ59").setFormula(`${prevSheetName}!${rolloverCell}`);
  activeSheet.getRange("BE15").setFormula(`${prevSheetName}!${savingsCell}`);
  
  // 日志输出验证变量
  Logger.log(prevSheetName);
  Logger.log(rolloverCell);
  Logger.log(savingsCell);
}

这段代码的优势在于:插入的是公式而非固定数值,所以即使之前的工作表的值被修改,所有相关工作表的对应单元格都会自动同步更新。


内容的提问来源于stack exchange,提问作者Riles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 20:05:01