Javascript 如何增加单元格值并在其';它大于Google表单中的限制

Javascript 如何增加单元格值并在其';它大于Google表单中的限制,javascript,performance,google-apps-script,google-sheets,Javascript,Performance,Google Apps Script,Google Sheets,我正在为Google工作表设计一个脚本,我可以根据相邻单元格控制单元格的限制值,如下所示: A. B C D E F G 1. 第1周(至11/4) 第2周(至18/4) 第3周(至25/4) 第4周(至2/5) 第5周(至9月5日) 第6周(至16/5) 2. 约翰+ 0 0 0 0 0 0 我认为您的主要问题是反复使用sheet.getRange()和Range.setValue(),这可能需要大量的时间。您是否可以在更大的范围内使用sheet.getRange()一次(例如,您的示例是va

我正在为Google工作表设计一个脚本,我可以根据相邻单元格控制单元格的限制值,如下所示:

A. B C D E F G 1. 第1周(至11/4) 第2周(至18/4) 第3周(至25/4) 第4周(至2/5) 第5周(至9月5日) 第6周(至16/5) 2. 约翰+ 0 0 0 0 0 0
我认为您的主要问题是反复使用
sheet.getRange()
Range.setValue()
,这可能需要大量的时间。您是否可以在更大的范围内使用
sheet.getRange()
一次(例如,您的示例是
var range=sheet.getRange(“B2:G2”)
),然后使用
var vals=range.getValues()[0]
来获取值数组?然后,您可以在数组本身内进行验证,修改
vals
,然后使用
range.setValues([vals])
将现在只在一列中修改的原始数组设置为更新值,而不是每次都设置值。这对运行时有帮助吗?

我认为您的主要问题是反复使用
sheet.getRange()
Range.setValue()
,这可能需要大量的时间。您是否可以在更大的范围内使用
sheet.getRange()
一次(例如,您的示例是
var range=sheet.getRange(“B2:G2”)
),然后使用
var vals=range.getValues()[0]
来获取值数组?然后,您可以在数组本身内进行验证,修改
vals
,然后使用
range.setValues([vals])
将现在只在一列中修改的原始数组设置为更新值,而不是每次都设置值。这对运行时有帮助吗?

以下代码将循环遍历C2:G2中的值,直到找到一个小于limitPerWeek的值

然后将该值增加1,并将新的值集放回B2:G2

如果B2:G2中的所有值都等于limitPerWeek,那么代码将不执行任何操作而退出,如果在这种情况下希望执行任何操作,则不确定执行什么操作

var limitPerWeek=2;
函数onPress(){
var sheet=SpreadsheetApp.getActiveSheet();
var weeks=sheet.getRange('B2:G2').getValues();
设i=0;
控制台日志(i);
while(weeks[0][i]>=limitPerWeek | i>weeks[0]。长度){
i=i+1;
}

如果(i以下代码将循环C2:G2中的值,直到找到一个小于limitPerWeek的值

然后将该值增加1,并将新的值集放回B2:G2

如果B2:G2中的所有值都等于limitPerWeek,那么代码将不执行任何操作而退出,如果在这种情况下希望执行任何操作,则不确定执行什么操作

var limitPerWeek=2;
函数onPress(){
var sheet=SpreadsheetApp.getActiveSheet();
var weeks=sheet.getRange('B2:G2').getValues();
设i=0;
控制台日志(i);
while(weeks[0][i]>=limitPerWeek | i>weeks[0]。长度){
i=i+1;
}

如果(我感谢你的建议!我已经用你的评论添加了代码,但是我无法让它工作。你能检查一下吗?当然可以!你只需要添加一行,当你递增
vals[I]
时,递减
vals[I+1]
。所以,在第14行,就在
vals[I+1]+;
之后,写一行新行,上面写着
vals[I]--;
。这能解决问题吗?@manooo这个解决方案还有一个值得注意的地方,就是最终值可以毫无限制地增加。如果你愿意,你可以编写另一个if语句来捕捉它。谢谢你的建议!我已经用你的注释添加了代码,但我无法让它工作。你能检查一下吗?当然可以!你只需要当您递增
vals[i+1]
时,添加一行递减
vals[i]
。因此,在第14行
vals[i+1]++;
之后,只需写一行新的
vals[i]--
。这能解决问题吗?@manoooh这个解决方案还有一个值得注意的问题,就是最终值可以不受限制地增加。如果你愿意,你可以编写另一个if语句来捕获它。谢谢!我需要包括列
B
,为什么要排除?对于大量列(周),代码是否有效一个
limitPerWeek
等于
20-40
?这是一个输入错误-我会修正它,代码B2:G2正在使用。不确定效率,应该不会太差,因为代码所做的只是更改一个值。代码仍然排除列
B
(第1周)从递增开始。我们是否应该将
let i=0;
更改为
let i=-1;
以包含列B?糟糕,将其更改为let i=-1将起作用。谢谢!我需要包含列
B
,为什么被排除?对于大量列(周),代码是否有效一个
limitPerWeek
等于
20-40
?这是一个输入错误-我会修正它,代码B2:G2正在使用。不确定效率,应该不会太差,因为代码所做的只是更改一个值。代码仍然排除列
B
(第1周)我们是否应该将
let i=0;
更改为
let i=-1;
以包含列B?我的错,将其更改为let i=-1将起作用。