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

如何用Google Apps Script将数据写入指定列最后一行而非全列,避免空缺?

问题原因

当前代码使用getLastRow()获取的是「Archived Data」工作表整表的最后数据行,当A、B列已有数据的行号大于E列的最后行号时,写入位置会和A、B列的最后输入位置错位,产生空缺。

解决方法
  • 替换原有整表最后行的计算逻辑,改为获取A/B列的最后非空行号
  • 以该非空行号作为E列的写入起始行,对齐A、B列的最后输入位置
修改后代码
var sss = SpreadsheetApp.openById('sampleID');
var ss = sss.getSheetByName('Forecast data'); 
var range = ss.getRange('B126');

const now = new Date();
const data = range.getValues().map(row => row.concat(now));

var tss = SpreadsheetApp.openById('sampleID2');
var ts = tss.getSheetByName('Archived Data'); 

// 获取A列最后非空行号,需匹配B列则将下方'A:A'改为'B:B'
const lastRowOfTargetCol = ts.getRange('A:A').getValues().filter(String).length;

// 写入对应行的E、F列
ts.getRange(lastRowOfTargetCol, 5, 1, 2).setValues(data);
}
适配空行场景优化

如果A/B列存在中间空行,可使用反向遍历的方法精准获取最后非空行号:

var sss = SpreadsheetApp.openById('sampleID');
var ss = sss.getSheetByName('Forecast data'); 
var range = ss.getRange('B126');

const now = new Date();
const data = range.getValues().map(row => row.concat(now));

var tss = SpreadsheetApp.openById('sampleID2');
var ts = tss.getSheetByName('Archived Data'); 

// 反向遍历获取指定列最后非空行号,匹配B列则将调用时的传参改为2
function getLastNonEmptyRow(sheet, column) {
  const values = sheet.getRange(1, column, sheet.getMaxRows(), 1).getValues();
  for (let i = values.length - 1; i >= 0; i--) {
    if (values[i][0] !== '') return i + 1;
  }
  return 1;
}
const targetRow = getLastNonEmptyRow(ts, 1);

ts.getRange(targetRow, 5, 1, 2).setValues(data);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 00:06:01