第一篇文章,没有那么多问题更多建议。
我一直致力于在Google Scripts中将一定数量的数字添加到10行中。我有以下代码可以工作,但无法帮助我们思考有一种更简单的方法来实现这一目标。
我已经对代码进行了评论,解释了哪个部分可以执行哪些操作,但实际上它需要来自不同单元格的数字,然后以10个为一组创建连续数字的行。
function orderArea1() {
for(x = 0, y = 0, z = 1; z <= releaseNoteSH.getRange(10, 4).getValue(); z++){ // Sets variables; checks the z is lower or equal to source quantity, increase z by 1
y = y + 0.099; // Add 0.099 to y. This is to stop the row reference changing too early
releaseNoteSH.getRange(Math.floor(y + 10), x + 6).setValue(z); // Set location of first number using y rounded down to the nearest integer, and set value using z
x++; // Add 1 to x
if(x >= 10){ // If/when x reaches 10 reset x to 0
x = 0;
}
}
}
如果有人能就如何简化这一点给我一个想法,我会非常有兴趣听到!
我现在只学习了一个星期左右的JavaScript,这个网站非常宝贵,感谢大家在这里!
答案 0 :(得分:0)
这里有很多值得讨论的内容,但我必须在第一周对开发人员说,这是一个非常聪明的黑客。
看起来你最终想要这样的东西:
releaseNoteSH.getRange(row, col).setValue(z);
z
是一个从1开始并达到某个未知限制的数字,row
是10或更高的数字,具体取决于有多少行,col
是一个6到15之间的数字,取决于我们在行中的位置。从单个数字计算行和列的正确方法如下所示:
var row = Math.floor(z/10); // This number starts at 0 and goes up by 1 every time z goes up by 10
var col = z % 10; // This number starts at 0 and goes up along with z, but starts over every time it hits 10
releaseNoteSH.getRange(row + 10, col + 6).setValue(z + 1); // Because z now starts at 0
对于行,我们除以我们想要行的大小,然后向下舍入。为了每个人的理智,我们将在0开始计算z。
对于列,你会大声读出该行,&#34; col等于z mod one。&#34; %
是javascript中的modulo operator(只要您使用正数)。 Modulo是一个基本的算术运算,在编程中非常重要,但由于某些原因,并没有在+
,-
等学校中教授。这意味着,&#34;将左边的数字除以右边,然后返回剩余的数字而不是答案。因此,对于数字0-9,z / 10
等于0,余数为z
。然后,对于数字10-19,z / 10
为1,其余为z
,依此类推。
全部放在一起:
var max = releaseNoteSH.getRange(10, 4).getValue();
for (var i = 0; i < max; i++) {
var row = Math.floor(i/10);
var col = i % 10;
releaseNoteSH.getRange(row + 10, col + 6).setValue(i + 1);
}
此版本的另一个改进是存储我们在循环外的变量中计算的数字。目前,您的代码每次循环运行时都会调用releaseNoteSH.getRange(10, 4).getValue();
。由于该单元格中的数字将始终相同,因此所有这些函数调用都是浪费时间。
您的下一个改进是弄清楚如何使用app scripts API只调用releaseNoteSH.getRange()
一次,而不是每次都在循环内重复它。