我觉得以下两个函数应该产生相同的结果,但函数bob()
永远不会发现name1
等于name2
,即使这些单元格中的名称确实相等。 / p>
函数bob2()
工作正常,但我试图通过使用数组加快速度。
function bob()
{
var ss = SpreadsheetApp.getActiveSheet();
var name1 ;
var name2 ;
var AthName = ss.getRange(1,2,30).getValues();
for (var xx=1; xx<30 ;xx++)
{
name1=AthName[xx]
name2=AthName[xx+1]
//name1 never equals name2 here.
if (name1==name2) ss.getRange(xx,10).setValue(name2);
}
}
function bob2()
{
var ss = SpreadsheetApp.getActiveSheet();
var name1 ;
var name2 ;
for (var xx=1; xx<30 ;xx++)
{
name1 = ss.getRange(xx,2).getValue();
name2 = ss.getRange(xx+1,2).getValue();
//name1 does equal name2 here as expected.
if (name1==name2) ss.getRange(4+xx,10).setValue(name2);
}
}
bob()
有什么问题?
答案 0 :(得分:0)
bob()
的问题在于您将AthName
设置为二维值列表:
var AthName = ss.getRange(1,2,30).getValues();
Range.getValues()
始终返回按行和列索引的二维列表。
这意味着您要将列表分配到name1
和name2
:
name1=AthName[xx]
name2=AthName[xx+1]
列表只有在它们是相同的列表时才相等,即,变量指的是相同的内存位置。因此,无论列表包含什么,name1 == name2
都将是假的。
此修复程序现在可能很明显。从每行检索值:
name1 = AthName[xx][0];
name2 = AthName[xx+1][0];
(为了良好的JavaScript风格,我添加了空格和分号。)