我正在尝试将范围中的值与不同数组中的值进行比较,但我一直得到错误的答案。
我的宏
function getNPI(range) {
var match=["A","A","A","B","B","A","B","A","B","B","A","A","A","A","B","A","B","B","B","B","A","B","B","A","A","B","A","B","A","A","A","B","A","A","B","A","A","A","A","B"];
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var cellValues= sheet.getRange(range).getValues();
var count=0;
for (var i=0;i<cellValues.length;i++)
{
if(cellValues[i]==match[i])
count++;
}
return "list length:"+cellValues.length+" items in list var:"+cellValues+" items in list func call:"+sheet.getRange(range).getValues()+" matching items:"+count;
}
电子表格中的结果:
list length:1 items in list var:A,B,A items in list func call:A,B,A matching items:0
电子表格初始调用
=getNPI("AE3:AG3")
电子表格包含AE3中的A,AF3中的B和AG3中的A
如果我更改了我的代码,则使用.getValue()代替它只返回第一个单元格中的值。有没有办法使这项工作无需迭代数组中的每个元素来记录最初的值?
答案 0 :(得分:0)
使用getValues()时,会返回一个二维Javascript数组。在您的示例中,它将采用以下形式:
[["A", "B", "A"]]
当您将该数组连接到输出字符串时,它将为您提供您提到的输出;但是,cellValues实际上是一个长度为一个元素的数组,包含一个包含3个元素的数组。因此,如果引用的数组始终是该表单,那么您应该将变量声明更改为:
var cellValues= sheet.getRange(range).getValues()[0];
顺便说一句,你有没有理由不直接将范围传递给函数?
function getNPI(range) {
var match=["A","A","A","B","B","A","B","A","B","B","A","A","A","A","B","A","B","B","B","B","A","B","B","A","A","B","A","B","A","A","A","B","A","A","B","A","A","A","A","B"];
var cellValues = range[0];
...