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

Google Apps Script脚本无法将单元格值设为0的技术求助

Google Apps Script替换0值不生效问题修复

问题描述

脚本功能为在目标表格第一列匹配零件编号,匹配成功后替换第二列数值。正常情况运行正常,但当替换的新值为0时,修改操作不生效。

原脚本:

function adjustment() {
  
  // source spreadsheets
  var sourceSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var srcSheet = sourceSpreadSheet.getSheets()[5];

  //destination spreadsheet
  var destinationSpreadSheet = SpreadsheetApp.openById('xxxxxx');
  var destSheet = destinationSpreadSheet.getSheets()[8]; 

  var values = srcSheet.getRange("C22:C23").getValues().reduce(function(a, b) {
    return a.concat(b)
  });
  var partNum = values[0];
  var row;
  destSheet.getDataRange().getValues().forEach(function(r, i) {
      if (r[0] === partNum) {
          row = i + 1
      }
  })
  row = row ? row : destSheet.getLastRow() + 1;
  var data = destSheet.getRange(row, 1, 1, 2).getValues()[0].map(function (el, ind){
    return el = values[ind] ? values[ind] : el;
  })

  var statusValue = srcSheet.getRange("C22:C23").getValue();   //added

  if (statusValue != '') {                       //added
    destSheet.getRange(row, 1, 1, 2).setValues([data]);   //added
    srcSheet.getRange("C22:C23").clearContent()
  }
}

问题原因

  1. map函数假值判断缺陷:JavaScript中0属于假值,values[ind] ? values[ind] : el会直接返回原有值el,不会替换成0。
  2. 条件判断逻辑错误:if (statusValue != '')中,0会被隐式转换为布尔值false,导致条件不成立,跳过写入操作。

修复方案

修改点1:替换map函数的判断逻辑

将假值判断改为严格判断是否未定义或为空,确保0能正常被替换:

var data = destSheet.getRange(row, 1, 1, 2).getValues()[0].map(function (el, ind){
  return (typeof values[ind] !== 'undefined' && values[ind] !== null) ? values[ind] : el;
})

修改点2:调整条件判断逻辑

将判断statusValue != ''改为判断零件编号partNum是否有效(零件编号为空时才不执行),避免0被误判:

if (partNum !== '' && partNum !== null && partNum !== undefined) {
  destSheet.getRange(row, 1, 1, 2).setValues([data]);
  srcSheet.getRange("C22:C23").clearContent()
}

完整修复后脚本

function adjustment() {
  
  // source spreadsheets
  var sourceSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var srcSheet = sourceSpreadSheet.getSheets()[5];

  //destination spreadsheet
  var destinationSpreadSheet = SpreadsheetApp.openById('xxxxxx');
  var destSheet = destinationSpreadSheet.getSheets()[8]; 

  var values = srcSheet.getRange("C22:C23").getValues().reduce(function(a, b) {
    return a.concat(b)
  });
  var partNum = values[0];
  var row;
  destSheet.getDataRange().getValues().forEach(function(r, i) {
      if (r[0] === partNum) {
          row = i + 1
      }
  })
  row = row ? row : destSheet.getLastRow() + 1;
  var data = destSheet.getRange(row, 1, 1, 2).getValues()[0].map(function (el, ind){
    return (typeof values[ind] !== 'undefined' && values[ind] !== null) ? values[ind] : el;
  })

  if (partNum !== '' && partNum !== null && partNum !== undefined) {
    destSheet.getRange(row, 1, 1, 2).setValues([data]);
    srcSheet.getRange("C22:C23").clearContent()
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:45:16