You need to enable JavaScript to run this app. Google Sheets脚本如何忽略F列公式,获取正确最后一行粘贴数据
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets脚本如何忽略F列公式,获取正确最后一行粘贴数据

问题核心

原代码使用的getLastRow()是工作表全局方法,会统计所有列包含内容/公式的最后一行,F列的全列公式导致返回值偏大,所以数据会被粘贴到靠下的位置。修改核心是仅统计你要粘贴的目标列的最后一个非空行,完全忽略F列的内容。


修改后的完整代码

function CopyTime() {
  var sourceSheet = "Data";
  var sourceCell = "E61";
  var destinationSheet = "Log";
  var destinationCell = "E6";
  var ss = SpreadsheetApp.getActive();
  var sourceValue = ss.getSheetByName(sourceSheet).getRange(sourceCell).getValue();
  var destSheet = ss.getSheetByName(destinationSheet);
  var destRange = destSheet.getRange(destinationCell);
  var destRow = destRange.getRow();
  var destCol = destRange.getColumn();
  // 仅获取目标列从起始行到工作表最大行的所有值,不依赖全局getLastRow,完全忽略F列影响
  var destValues = destSheet.getRange(destRow, destCol, destSheet.getMaxRows() - destRow + 1).getValues();
  var lastNonEmptyIndex = -1;
  // 遍历目标列,记录最后一个非空单元格的索引
  for (var i = 0; i < destValues.length; i++) {
    if (destValues[i][0] !== "") {
      lastNonEmptyIndex = i;
    }
  }
  // 计算下一个空行的索引
  var nextEmptyIndex = lastNonEmptyIndex + 1;
  destSheet.getRange(destRow + nextEmptyIndex, destCol).setValue(sourceValue);
}

主要修改点

  • 替换了destValues的取值逻辑:放弃使用全局的destSheet.getLastRow(),改用destSheet.getMaxRows()直接读取目标列(粘贴用的E列)从起始行(E6)到工作表最底部的所有单元格值,全程不参考F列的任何内容。
  • 修正了单元格值的判断逻辑:getValues()返回二维数组,哪怕只有一列,每行内容也存在子数组的第一个元素中,判断destValues[i][0]是否为空才能正确识别空单元格,避免原代码判断子数组永远为真的逻辑漏洞。
  • 简化了空行定位逻辑:正向遍历记录最后一个非空单元格的位置,+1直接得到下一个可用空行的位置,逻辑更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 09:06:03