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
相关产品推荐
相关产品推荐

