我是Google Apps脚本的新手,它试图根据列的当前值和标志为列设置值。
如果Flag = Y,则对C1中的值进行下限:
C1列值= 23.9895
期望值= 23
如果Flag = N,则四舍五入C1中的现有值:
C1列值= 23.9895
期望值= 24
如果标志是Y或N,则写0:
C1列值=空单元格
期望值= 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);
答案 0 :(得分:0)
通过批处理(并遵循official best practices)执行此操作要快得多。将这些read the values转换成“ 2D” JavaScript数组(值数组),然后您就可以在内存中执行所有逻辑,而不必反复从slow Spreadsheet interface.
请求数据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);
}
与往常一样,您应该通过检查Stackdriver日志(可通过脚本编辑器的“查看”菜单访问)来监视宏和触发函数的错误。