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

Google Sheets Apps Script如何在指定列最后非空单元格同行写文本

问题背景
  • 本人为Apps Script新手,目前正在重温Java基础编码与Sheets公式相关知识
  • 上千份发票分散存储在多个电子表格中,单份发票对应表格内的一个独立标签页,不同发票的数据行数不固定
  • 核心需求:在F列最后一个非空单元格的同行A列单元格写入文本End,供第三方开发的自动化流程识别使用。例:若F列最后非空单元格为F23,则需在A23填入End
  • 已尝试方案:使用IF(OR(ISNUMBER(SEARCH(...类公式实现,但无法实现「仅在F列最后非空单元格对应行填充文本」的逻辑,暂未找到可行实现路径
可行解决方案

方案1:单表Sheets公式自动适配

不需要写脚本,直接在A列数据起始单元格输入数组公式即可自动匹配位置,后续F列数据增减时End的位置会自动更新,无需手动调整。
如果你的数据从第1行开始,直接在A1单元格输入以下公式按回车即可:

=ARRAYFORMULA(IF(ROW(F:F)=MAX(FILTER(ROW(F:F),F:F<>"")),"End",""))

如果你的表格有表头,数据从第2行开始,就把公式放在A2单元格,对应调整公式范围:

=ARRAYFORMULA(IF(ROW(F2:F)=MAX(FILTER(ROW(F2:F),F2:F<>"")),"End",""))

公式逻辑:

  • 先筛选出F列所有非空单元格的行号,取最大值得到F列最后一个非空单元格的行位置
  • 遍历A列对应范围,仅当行号和上述最后非空行号匹配时填入End,其余单元格保持为空

方案2:Apps Script批量处理全量表格

如果需要处理上千个标签页,逐个加公式效率太低,可以用Apps Script一键批量完成所有表格的标记写入,操作步骤:

  1. 打开任意一个目标电子表格,点击顶部菜单栏「扩展程序」→「Apps Script」进入脚本编辑器
  2. 清空编辑器内默认的示例代码,粘贴以下代码:
function writeEndMark() {
  // 填入所有需要处理的电子表格ID,多个ID用英文逗号分隔
  const fileIds = ["替换为你的第一个表格ID", "替换为你的第二个表格ID"];
  const markText = "End";

  fileIds.forEach(fileId => {
    const spreadsheet = SpreadsheetApp.openById(fileId);
    // 遍历当前电子表格下的所有标签页
    spreadsheet.getSheets().forEach(sheet => {
      // 定位F列最后一个非空单元格行号
      const fColValues = sheet.getRange("F:F").getValues();
      const lastFilledRow = fColValues.findLastIndex(row => row[0] != null && row[0] !== "") + 1;
      if (lastFilledRow < 1) return; // 跳过F列无内容的无效表
      // 在对应A列位置写入标记
      sheet.getRange(lastFilledRow, 1).setValue(markText);
    });
  });
}
  1. 将代码中fileIds数组的占位内容替换为你实际存储发票的电子表格ID,表格ID可从表格网页URL中d/和/edit之间的字符串获取
  2. 点击编辑器顶部的运行按钮,首次运行按弹窗指引完成账号授权即可,脚本会自动遍历所有指定表格的标签页完成标记写入。

提示:运行脚本前建议先备份原始表格数据,避免误操作导致内容丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 06:57:30