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

Google Apps Script 定位工作表末行最右列追加输入组的逻辑优化

EddieInput 生成表脚本定位逻辑修正

原脚本核心偏差

当前列定位逻辑直接取了整张工作表级别的最后一列,完全没有针对目标已用末行做单独的单元格扫描,所以会跳过当前行的实际内容边界,直接把内容写到全表最右侧的位置,和“横向追加到当前内容行末尾”的需求不匹配。

修正后的完整可用代码

严格遵循「锁定有效内容区的真实末行 → 单独扫描该行的非空单元格边界 → 从边界右侧相邻列开始写入3条输入条目」的逻辑,修正后的代码如下:

function addbuttontoString()
{
  // 绑定目标工作表
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const eddGenSheet = ss.getSheetByName("Eddie Input Generator");
  const CharacterFrameDataSheet = ss.getSheetByName("CharacterFrameData");

  // 定位有效内容区(排除前4行固定表头)的真实末行
  const totalSheetRows = eddGenSheet.getLastRow();
  const contentAreaRows = totalSheetRows >=5 ? totalSheetRows -4 : 0;
  const rowValues = eddGenSheet.getRange(5, 1, contentAreaRows, 1).getValues();
  // 从下往上找第一个非空行,得到真实有内容的末行行号
  let effectiveLastRow = 4;
  for(let i = rowValues.length -1; i >=0; i--){
    if(rowValues[i][0] !== ""){
      effectiveLastRow = i +5;
      break;
    }
  }

  // 单独扫描这个末行,定位该行实际有内容的最右列号
  const maxPossibleCol = eddGenSheet.getLastColumn();
  const currentRowValues = eddGenSheet.getRange(effectiveLastRow, 1, 1, maxPossibleCol).getValues()[0];
  let effectiveLastCol = 0;
  for(let j = currentRowValues.length -1; j >=0; j--){
    if(currentRowValues[j] !== ""){
      effectiveLastCol = j +1;
      break;
    }
  }

  // 匹配对应按键的完美帧值,和原逻辑保持一致
  const lastrowItem = CharacterFrameDataSheet.getLastRow();
  const targetButton = eddGenSheet.getRange('B4').getValue();
  let perfectFrame = "";
  for(let i = 2; i <= lastrowItem; i++){
    if(targetButton == CharacterFrameDataSheet.getRange(i, 1).getValue()){
      perfectFrame = CharacterFrameDataSheet.getRange(i, 4).getValue();
    }
  }

  // 分场景写入内容
  if(effectiveLastRow ===4){
    // 内容区全空时,从A5开始写入初始条目
    eddGenSheet.getRange("A5").setValue(targetButton);
    eddGenSheet.getRange("B5").setValue("F");
    eddGenSheet.getRange("C5").setValue(perfectFrame);
  } else {
    // 有内容时,从末行最后一个非空格的右侧相邻格开始写入3条横向条目
    eddGenSheet.getRange(effectiveLastRow, effectiveLastCol +1).setValue(targetButton);
    eddGenSheet.getRange(effectiveLastRow, effectiveLastCol +2).setValue("W");
    eddGenSheet.getRange(effectiveLastRow, effectiveLastCol +3).setValue(perfectFrame);
  }
}

适配说明

  • 完全保留原脚本的帧数据匹配规则、空表初始写入格式、向下插入新行的按钮逻辑,两个按钮的脚本可以分别绑定使用,不会出现逻辑冲突
  • 逐行逐格扫描的逻辑不会被零散分布的空白单元格干扰,哪怕中间有空隔的已用单元格,也能准确定位当前行的最后内容边界
  • 排除了前4行表头的干扰,不会因为表头位置的残留数据误判有效内容的位置边界

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 01:24:03