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

