Javascript 使用GAS向选定单元格范围的单元格添加值
我需要将传递的值添加到每个选定单元格的函数中(比如20.35)。我有一个巨大的列表,下面的函数会超时,它最多可以运行6分钟,而不会将添加的结果添加到单元格中 我如何找到一个解决方法,在每次一个接一个地完成计算后立即写入单元格。例如,如果它在完成10260之后过期,那么在10259之前,单元格值加上20.35,我可以通过将单元格颜色从1更改为10259来突出显示。原始颜色表示未添加的单元格Javascript 使用GAS向选定单元格范围的单元格添加值,javascript,google-apps-script,google-sheets-api,Javascript,Google Apps Script,Google Sheets Api,我需要将传递的值添加到每个选定单元格的函数中(比如20.35)。我有一个巨大的列表,下面的函数会超时,它最多可以运行6分钟,而不会将添加的结果添加到单元格中 我如何找到一个解决方法,在每次一个接一个地完成计算后立即写入单元格。例如,如果它在完成10260之后过期,那么在10259之前,单元格值加上20.35,我可以通过将单元格颜色从1更改为10259来突出显示。原始颜色表示未添加的单元格 function addToCells(isAll, valueToAdd) { var she
function addToCells(isAll, valueToAdd) {
var sheet = SpreadsheetApp.getActiveSheet();
if (isAll)
var range = sheet.getDataRange();
else
var range = sheet.getActiveRange();
var Values = range.getValues();
for (var i in Values) {
for (var j in Values[i]) {
var value = Values[i][j].toString();
if (value) {
Values[i][j] = parseFloat(value) + valueToAdd;
//how to write Values[i][j] to cell now
}
}
}
range.setValues(Values); // this will not execute if timesout
}
您的脚本正在将数字转换为字符串并返回,这比在数字中添加1要花费更多的时间。我知道您希望避免将字符串结尾处的“1”弄乱,并且您可能不希望所有空单元格都包含“1”。这两种方法都是通过在添加元素之前检查元素的类型来实现的:
function testadd() {
var range = ... // whatever
var values = range.getValues();
var newValues = values.map(function(row) {
return row.map(function(elem) {
return (typeof elem == "number" ? elem + 1 : elem);
});
});
range.setValues(newValues);
}
您不想为每个单元格运行单独的“setValue”,这将是一个真正的性能杀手,并且很快就会超出执行时间配额 非常感谢,但在我的情况下,这也会导致超时,因为它相当大。你能帮我间歇性地添加和放置计算数据,而不是放在末尾吗。