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() } }
问题原因
- map函数假值判断缺陷:JavaScript中0属于假值,
values[ind] ? values[ind] : el会直接返回原有值el,不会替换成0。 - 条件判断逻辑错误:
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
相关产品推荐
相关产品推荐

