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

Google Apps Script双表单同一卡车数据存入同一行求助

卡车数据录入系统修改需求

我正在搭建一个卡车数据录入系统,包含港口表单、堆场表单和一个数据存储Sheet。流程是港口人员先录入卡车基础数据,等卡车到堆场后,堆场人员需要补充数据到存储Sheet中对应同一卡车编号的行,完善运输详情。但当前代码只能把数据写入空行,没法定位到对应卡车编号的行更新,求修改方案。

现有代码

if (validateEntry()==true)
{

var blankRow=datasheet.getLastRow()+1;

datasheet.getRange(blankRow,12).setValue(shSutForm.getRange("D8").getValue()); 

datasheet.getRange(blankRow,13).setValue(shSutForm.getRange("D10").getValue()); 

datasheet.getRange(blankRow,14).setValue(shSutForm.getRange("D16").getValue()); 

datasheet.getRange(blankRow,15).setValue(shSutForm.getRange("D18").getValue());

datasheet.getRange(blankRow,16).setValue(shSutForm.getRange("D20").getValue());

datasheet.getRange(blankRow,17).setValue(shSutForm.getRange("H8").getValue());

datasheet.getRange(blankRow,18).setValue(shSutForm.getRange("H10").getValue());

datasheet.getRange(blankRow,21).setValue(shSutForm.getRange("H16").getValue());

datasheet.getRange(blankRow,22).setValue(shSutForm.getRange("H18").getValue());

datasheet.getRange(blankRow,23).setValue(shSutForm.getRange("H20").getValue());

datasheet.getRange(blankRow,19).setValue(shSutForm.getRange("L8").getValue());

datasheet.getRange(blankRow,20).setValue(shSutForm.getRange("L10").getValue());

ui.alert('TRUCK DATA SAVED');

shSutForm.getRange("D8").clear();
shSutForm.getRange("D10").clear();
shSutForm.getRange("D16").clear();
shSutForm.getRange("D18").clear();
shSutForm.getRange("D20").clear();

shSutForm.getRange("H8").clear();
shSutForm.getRange("H10").clear();
shSutForm.getRange("H16").clear();
shSutForm.getRange("H18").clear();
shSutForm.getRange("H20").clear();

shSutForm.getRange("L8").clear();
shSutForm.getRange("L10").clear();

} 


}

修改方案

核心思路是先通过卡车编号在存储Sheet中找到匹配行,再更新对应单元格;如果找不到匹配行,再写入新行(可选)。

步骤1:获取待匹配的卡车编号

假设堆场表单中卡车编号的输入单元格为D6(请根据实际表单调整),先获取该值:

var truckId = shSutForm.getRange("D6").getValue(); // 替换为实际卡车编号单元格
if (!truckId) {
  ui.alert('请输入卡车编号');
  return;
}

步骤2:查找存储Sheet中的匹配行

方法1:遍历数据查找(适合小数据量)

获取存储Sheet的所有数据,遍历找到对应卡车编号的行:

var dataRange = datasheet.getDataRange();
var values = dataRange.getValues();
var targetRow = -1;

// 假设卡车编号存储在第1列(A列),实际列需替换为对应索引(列号-1)
var truckIdColumnIndex = 0; 

for (var i = 0; i < values.length; i++) {
  if (values[i][truckIdColumnIndex] == truckId) {
    targetRow = i + 1; // 转换为Sheet行号(索引从0开始,行号从1开始)
    break;
  }
}

方法2:用TextFinder查找(适合大数据量,效率更高)

var textFinder = datasheet.createTextFinder(truckId).matchEntireCell(true);
var findResult = textFinder.findNext();
var targetRow = findResult ? findResult.getRow() : -1;

步骤3:更新匹配行或写入新行

将原有代码中的blankRow替换为找到的匹配行,未找到则保留写入新行的逻辑:

if (validateEntry() == true) {
  var truckId = shSutForm.getRange("D6").getValue(); // 替换为实际卡车编号单元格
  if (!truckId) {
    ui.alert('请输入卡车编号');
    return;
  }

  // 查找匹配行(这里用TextFinder示例,也可替换为遍历方式)
  var textFinder = datasheet.createTextFinder(truckId).matchEntireCell(true);
  var findResult = textFinder.findNext();
  var targetRow = findResult ? findResult.getRow() : -1;

  // 确定写入行:找到匹配行用targetRow,否则用新行
  var writeRow = targetRow !== -1 ? targetRow : datasheet.getLastRow() + 1;

  // 更新数据(原有写入逻辑,替换blankRow为writeRow)
  datasheet.getRange(writeRow,12).setValue(shSutForm.getRange("D8").getValue()); 
  datasheet.getRange(writeRow,13).setValue(shSutForm.getRange("D10").getValue()); 
  datasheet.getRange(writeRow,14).setValue(shSutForm.getRange("D16").getValue()); 
  datasheet.getRange(writeRow,15).setValue(shSutForm.getRange("D18").getValue());
  datasheet.getRange(writeRow,16).setValue(shSutForm.getRange("D20").getValue());
  datasheet.getRange(writeRow,17).setValue(shSutForm.getRange("H8").getValue());
  datasheet.getRange(writeRow,18).setValue(shSutForm.getRange("H10").getValue());
  datasheet.getRange(writeRow,21).setValue(shSutForm.getRange("H16").getValue());
  datasheet.getRange(writeRow,22).setValue(shSutForm.getRange("H18").getValue());
  datasheet.getRange(writeRow,23).setValue(shSutForm.getRange("H20").getValue());
  datasheet.getRange(writeRow,19).setValue(shSutForm.getRange("L8").getValue());
  datasheet.getRange(writeRow,20).setValue(shSutForm.getRange("L10").getValue());

  // 调整提示信息
  var alertMsg = targetRow !== -1 ? '卡车数据已更新' : 'TRUCK DATA SAVED';
  ui.alert(alertMsg);

  // 清空表单(原有逻辑不变)
  shSutForm.getRange("D8").clear();
  shSutForm.getRange("D10").clear();
  shSutForm.getRange("D16").clear();
  shSutForm.getRange("D18").clear();
  shSutForm.getRange("D20").clear();

  shSutForm.getRange("H8").clear();
  shSutForm.getRange("H10").clear();
  shSutForm.getRange("H16").clear();
  shSutForm.getRange("H18").clear();
  shSutForm.getRange("H20").clear();

  shSutForm.getRange("L8").clear();
  shSutForm.getRange("L10").clear();
}

关键注意事项

  • 卡车编号列索引:必须替换为存储Sheet中卡车编号实际所在列的索引(如A列对应0,B列对应1);
  • 表单卡车编号单元格:替换为堆场表单中用户输入卡车编号的实际位置;
  • 重复匹配处理:如果存在多个相同卡车编号的行,上述代码只会更新第一个匹配行,若需处理重复编号,可添加额外逻辑(如提示用户或更新所有匹配行)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:15:40