gpt4 book ai didi

javascript - Google Apps 脚本不会将变量解析为数组坐标中的 int

转载 作者:行者123 更新时间:2023-12-03 12:04:58 25 4
gpt4 key购买 nike

我正在尝试根据 B 列中与某些预定义字符串匹配的内容来更改整行的字体颜色。

虽然索引偏离了 1,但工作得很好,我需要考虑到这一点:

values[row][1]

错误:“TypeError:无法从未定义中读取属性“1”。”:

values[row+1][1]

尝试也会引发相同的错误:

values[1+Number(row)][1]

这是整个代码块:

function colorRow(){
var sheet = SpreadsheetApp.getActiveSheet();
var range=sheet.getDataRange();
var values = range.getValues();

for (var row in values){
var result;
if(values[1+Number(row)][1].toString()=="stalker"){
result = sheet.getRange(row,1,1,range.getLastRow())
result.setFontColor("purple");
}else if(values[1+Number(row)][1].toString() == "engineer"){
result = sheet.getRange(row,1,1,range.getLastRow())
result.setFontColor("yellow");
}else if(values[1+Number(row)][1].toString() == "warrior"){
result = sheet.getRange(row,1,1,range.getLastRow())
result.setFontColor("red");
}else if(values[1+Number(row)][1].toString() == "medic"){
result = sheet.getRange(row,1,1,range.getLastRow())
result.setFontColor("green");
}else if(values[1+Number(row)][1].toString() == "esper"){
result = sheet.getRange(row,1,1,range.getLastRow())
result.setFontColor("blue");
}else if(values[1+Number(row)][1].toString() == "spellslinger"){
result = sheet.getRange(row,1,1,range.getLastRow())
result.setFontColor("orange");
}
}
SpreadsheetApp.flush();
}

最佳答案

根据Mozilla JS docs引用“for in”循环:

Because the order of iteration is implementation dependent, iterating over an array may not visit elements in a consistent order. Therefore it is better to use a for loop with a numeric index (or Array.forEach or the for...of loop) when iterating over arrays where the order of access is important.

对于这种情况,您最好使用带有数字索引的标准“for 循环”:

for (var row=0; row<values.length; row++){ 
var result;
if(values[1+row][1].toString()=="stalker"){
result = sheet.getRange(row,1,1,range.getLastRow())
result.setFontColor("purple");
} // stuff
}

但实际上,要回答这个问题,将索引转换为数字的想法是正确的,因为它实际上是一个字符串。

错误不是来自循环,而是来自对 getRange() 的调用。 Apps 脚本需要一个整数/数字作为参数,但实际上您给它的是一个字符串。如果您确实想保留“for-in”循环(我建议不要这样做),则需要将循环内的所有行实例更改为数字或整数。

result = sheet.getRange(Number(row),1,1,range.getLastRow());

关于javascript - Google Apps 脚本不会将变量解析为数组坐标中的 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25224714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com