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

如何在Google Script中添加带相对引用的公式

在Google Script中添加带相对引用的公式

要在指定空白单元格中插入带相对引用的公式,需注意公式行号要匹配目标表的实际插入位置,不能固定使用B2。以下是修改后的完整脚本:

var sourceSpreadsheetId = "SOURCE_SPREADSHEET_ID";
var targetSpreadsheetId = "TARGET_SPREADSHEET_ID";

var sourceSheetName = "SourceSheetName";
var targetSheetName = "TargetSheetName"

var sourceSpreadsheet = SpreadsheetApp.openById(sourceSpreadsheetId);
var sourceSheet = sourceSpreadsheet.getSheetByName(sourceSheetName);

var targetSpreadsheet = SpreadsheetApp.openById(targetSpreadsheetId);
var targetSheet = targetSpreadsheet.getSheetByName(targetSheetName);

var selection = sourceSheet.getSelection();
var selectedRanges = selection.getActiveRangeList().getRanges();

var targetData = [];

selectedRanges.forEach(function (range) {
  var startRow = range.getRow();
  var numRows = range.getNumRows();
  var sourceRange = sourceSheet.getRange(startRow, 2, numRows, 4);
  var sourceValues = sourceRange.getValues();
  
  sourceValues.forEach(function (row) {
    // 保留原数据结构,空白项后续填充公式
    targetData.push([row[0], "", "", row[1], row[2], row[3]]);
  });
});

var startTargetRow = targetSheet.getLastRow() + 1;
var targetRange = targetSheet.getRange(startTargetRow, 1, targetData.length, targetData[0].length);
// 先写入所有静态值
targetRange.setValues(targetData);

// 生成并设置公式:针对B列(第2列)的空白单元格
var formulaRows = targetData.length;
var bFormulaRange = targetSheet.getRange(startTargetRow, 2, formulaRows, 1);
var bFormulas = [];
for(var i=0; i<formulaRows; i++){
  var currentRow = startTargetRow + i;
  bFormulas.push([`=IF(B${currentRow}="","--",COUNTIF($B$2:B${currentRow},B${currentRow}))`]);
}
bFormulaRange.setFormulas(bFormulas);

// 如果C列也需要填充相同公式,取消下面注释
// var cFormulaRange = targetSheet.getRange(startTargetRow, 3, formulaRows, 1);
// var cFormulas = [];
// for(var i=0; i<formulaRows; i++){
//   var currentRow = startTargetRow + i;
//   cFormulas.push([`=IF(B${currentRow}="","--",COUNTIF($B$2:B${currentRow},B${currentRow}))`]);
// }
// cFormulaRange.setFormulas(cFormulas);

关键说明

  • 动态行号匹配:通过startTargetRow + i计算当前单元格的实际行号,确保公式的相对引用与插入位置完全对应。
  • 值与公式分离处理:先用setValues写入静态数据,再用setFormulas单独设置公式区域,避免静态值被当作公式解析引发错误。
  • 灵活适配需求:如果仅需填充其中一个空白列,保留对应代码即可;若两个空白列都需要公式,取消对应注释即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:02:06