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

基于条件自动复制行至工作表:谷歌脚本仅返回最后一条记录问题排查

问题根源

你的脚本只保留最后一条符合条件记录的核心原因是:

  • Utlm_LinhaVistoria变量在函数外部初始化,值是固定的PlanVistoria.getLastRow()+1,循环中每次都往同一行写入数据,后续记录会覆盖之前的内容,最终只留下最后一条。
  • 另外你代码中写入了C列sala[2],但需求是复制第1、2、4列,这里属于笔误。
修正后的代码
var plan = SpreadsheetApp.getActiveSpreadsheet();
const PlanVistoria = plan.getSheetByName("Vistoria");
const PlanObras = plan.getSheetByName("ListaObras");

function ClassificarEapagarLinha() {
    PlanObras.getRange("A2:H").sort({column:2, ascending: true});
}

function PesquisarRecortarValoresColunaStatus() {  
    // 每次执行时获取最新的行数据
    const Ultm_LinhaObras = PlanObras.getLastRow();
    const PlanPesquisa = PlanObras.getRange("B2:H"+Ultm_LinhaObras).getValues();
    // 收集所有符合条件的记录
    const dadosParaCopiar = [];

    for(var linha = 0 ; linha < PlanPesquisa.length; linha++){
      if(PlanPesquisa[linha][6] == "OBRA CONCLUÍDA"){
        // 按需求提取原行第1、2、4列(对应B、C、E列,数组索引0、1、3)
        const linhaDados = [PlanPesquisa[linha][0], PlanPesquisa[linha][1], PlanPesquisa[linha][3]];
        dadosParaCopiar.push(linhaDados);
      }
    }

    // 一次性批量写入数据,避免重复操作单元格
    if(dadosParaCopiar.length > 0){
      const proximaLinhaVistoria = PlanVistoria.getLastRow() + 1;
      PlanVistoria.getRange(proximaLinhaVistoria, 1, dadosParaCopiar.length, dadosParaCopiar[0].length).setValues(dadosParaCopiar);
    }
}
关键优化说明
  • 将数据初始化逻辑移到函数内部,确保每次执行都获取表格最新状态
  • 用数组批量收集符合条件的记录,避免循环中重复写入单元格(既解决覆盖问题,又提升执行效率)
  • 写入前重新计算目标表的起始行,保证每条记录都写到新行
  • 修正了列索引的笔误,严格匹配你"复制第1、2、4列"的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:57:39