循环不适用于列匹配

时间:2017-08-20 14:34:51

标签: javascript google-apps-script google-sheets

我有一个循环,可以匹配底部的行值,它是这样的: -

var lastRow = s3.getLastRow();
var dataRange = s3.getRange(1, 1,lastRow).getValues();
for(var k=0;k<dataRange.length;k++)
{doing something}

然而,当我尝试使用列匹配做同样的事情时,我没有得到任何结果,这是我的循环没有做任何事情的列匹配。

var lastColumn = s3.getLastColumn();
var match2 = s3.getRange(1, 1,lastColumn).getValues();
for (var b = 0; b < match2.length; b++) 
{if (range[j][0] == match2[0][b])
{ do something } 
}

请建议我缺少的东西。

这是从文档中删除的:

getRange(row, column, numRows)  Range   Returns the range with the top left cell at the given coordinates, and with the given number of rows.

1 个答案:

答案 0 :(得分:1)

match2.length是数组中的行数或范围。

此数组[[x,x,x],[y,y,y],[z,z,z]...]在第一行中有三个x,在第二行中有三个x,依此类推。所以在s3.getRange(1, 1,lastColumn).getValues();中,lastColumn是该范围内的行数。基本上,它更容易阅读每一行,然后一次获得一列。或者您可以将数据转换为矩阵,然后读取现在为行的列。

寻找&#34;巨无霸&#39;

的循环
function myFunction() 
{
    var ss=SpreadsheetApp.getActive();
    var sh=ss.getActiveSheet();
    var rg=ss.getRange("A1:Z1");
    var vA=rg.getValues();
    for(var i=0;i<vA.length;i++)
    {
      for(j=0;j<vA[0].length;j++)
      {
        if(vA[i][j]=="Big Mac")
        {
          SpreadsheetApp.getUi().alert('Do not eat this burger as it has massive amounts of fat in it.');
          break;
        }
      }
    }
}

在通过诸如var data = range.getValues()之类的命令获得的这些二维数组中; data.length =行数和数据[0] .length =列数。所以数组元素的总数data.length x data [0] .length其中一些可能为null。许多刚接触Google Apps Scripting的程序员在此方面存在问题。事实上我遇到了很多麻烦,所以我最后做了一些额外的工作来帮助加强我的理解,你可以阅读它here

这些数组如下所示:[[0,1,2,3,4,5 ...],[0,1,2,3,4,5 ...],[0,1, 2,3,4,5 ...] ...]。所以vA是一个数组数组,因此术语vA.length等于vA中的元素数,简单地说它也等于行数。