Google apps script Google应用程序脚本:为空单元格分配零
我是谷歌应用程序脚本的新手,尝试根据列的当前值和标志设置列的值Google apps script Google应用程序脚本:为空单元格分配零,google-apps-script,google-sheets,google-sheets-macros,Google Apps Script,Google Sheets,Google Sheets Macros,我是谷歌应用程序脚本的新手,尝试根据列的当前值和标志设置列的值 如果Flag=Y,则C1中的值为: C1列值=23.9895 期望值=23 如果Flag=N,则将C1中的现有值四舍五入: C1列值=23.9895 期望值=24 如果标志为Y或N,则写入0: C1列值=空单元格 期望值=0 我已经实现了下面的代码。它部分地起作用了。前两种方案运行良好,但第三种方案失败。 当我尝试设置零时,我得到了#NUM错误,而不是零。不知道怎么做 ... do { sRange = "Q" + iCt;
期望值=23
期望值=24
期望值=0
当我尝试设置零时,我得到了
#NUM代码>错误,而不是零。不知道怎么做
...
do {
sRange = "Q" + iCt;
if ((gDecimalInPrice == "Y") && (!isNaN(sheet.getRange(sRange).getValue()))) {
sheet.getRange(sRange).setValue(Math.abs(parseInt(sheet.getRange(sRange).getValue())));
} else if ((gDecimalInPrice == "N") && (!isNaN(sheet.getRange(sRange).getValue()))) {
sheet.getRange(sRange).setValue(Math.abs(Math.round(sheet.getRange(sRange).getValue())));
} else {
sheet.getRange(sRange).setValue(sheet.getRange(sRange).getValue());
}
iCt = iCt + 1;
} while (iCt <= gRowCt);
。。。
做{
sRange=“Q”+iCt;
if((gDecimalInPrice==“Y”)&(!isNaN(sheet.getRange(sRange.getValue())){
sheet.getRange(sRange).setValue(Math.abs(parseInt)(sheet.getRange(sRange.getValue()));
}如果((gDecimalInPrice==“N”)&&(!isNaN(sheet.getRange(sRange.getValue())){
sheet.getRange(sRange).setValue(Math.abs(Math.round)(sheet.getRange(sRange.getValue()));
}否则{
sheet.getRange(sRange).setValue(sheet.getRange(sRange).getValue());
}
iCt=iCt+1;
}而(iCt通过批处理操作(和后续操作)执行此操作的速度要快得多。将这些操作转换为“2D”JavaScript数组(一组值数组),然后您可以在内存中执行所有逻辑,而不是重复地从
和往常一样,您应该通过查看Stackdriver日志(可通过脚本编辑器的“查看”菜单访问)来监控宏和触发函数的错误
function foo() {
const wb = SpreadsheetApp.getActive();
const sheet = wb.getSheetByName("the sheet name");
if (!sheet) throw new Error("Sheet with that name is missing");
const lastRow = sheet.getLastRow();
const flags = sheet.getRange("A1:A" + lastRow).getValues();
const valueRange = sheet.getRange("Q1:Q" + lastRow);
const newValues = valueRange.getValues().map(function (row, i) {
return row.map(function (value) {
var flag = flags[i][0];
if (!flag || (value && isNaN(value))) // No "Y" or "N", or value is non-nullstring non-number, so return value as-is
return value;
else if (flag === "Y")
return value ? Math.floor(parseFloat(value)) : 0;
else if (flag === "N")
return value ? Math.round(parseFloat(value)) : 0;
else // Unknown flag value
return value;
});
});
// Write all processed values at once
valueRange.setValues(newValues);
}