遍历数组并获取每个元素的行号

时间:2019-12-18 15:31:43

标签: arrays for-loop google-apps-script google-sheets row-number

我对Google Script非常陌生,我正在学习这份工作。 我有一系列数据作为变量。它只有一列,在这种情况下为F列,但是值之间有空单元格。我有一个工作脚本(之前从这里获得了它),该脚本仅循环访问其中包含值的单元格。因此,可以说value1在F5中,value2在F13中,它们都是随机的并且总是在变化。

我正在尝试获取这些值的行号,以便脚本应该给值1返还“ 5”,给值2返还“ 13”,理想情况下还应返回值本身。

到目前为止,这就是我所拥有的,我似乎无法进一步发展。

  var sourceID = "sourceID";
  var main = SpreadsheetApp.openById("mainID");
  var mainsheet = main.getSheetByName("Lab Data");
  var sourcesheet = source.getSheetByName("sheet name");
  var dataRange = sourcesheet.getDataRange(); // range full sheet
  var values = dataRange.getValues(); // values full sheet

  var SWrowss = findCellForSW(); // getting start row from another function 
  var CQrowss = findCellForCQ(); // getting last row from another function
  var noRows = CQrowss - SWrowss; // gets number of rows in range
  var colss = sourcesheet.getRange(SWrowss,6,noRows,1).getValues(); // range we need, column F

// get rid of empty cells from range - copied script from stack overflow
  var cResult = colss.reduce(function(ar, e) {
  if (e[0]) ar.push(e[0])
  return ar;
  }, []);
  Logger.log("cResult:   " + cResult); // cResult contains all sub headers - no empty cells

// gets element's position in array
  for(var b = 0; b < cResult.length; b++){
    var position = b+1;
    Logger.log("pos   " + position);
  } // end for 

2 个答案:

答案 0 :(得分:1)

如果您想知道行号,我会建议您使用另一种方法

只需遍历您的值并检索不为空的值的位置:

...
var colss = sourcesheet.getRange(SWrowss,6,noRows,1).getValues();
var rows = [];
var calues = [];
for(var b = 0; b < colss.length; b++){
  if(colss[b][0] != "" && colss[b][0] != " "){
    var row = SWrowss+b+1;
    rows.push(row);
    var value = colss[b][0];
    values.push(value);
  }
}
...

答案 1 :(得分:1)

使用其他解决方案,您可以构建一个可以非常快速地为您进行转换的对象。

var colss = sourcesheet.getRange(SWrowss,6,noRows,1).getValues();
var rvObj={};
for(var b = 0; b < colss.length; b++){
  if(colss[b][0] != "" && colss[b][0] != " "){
   rvObj[colss[b][0]]=SWrowss+b+1;
  }
}

现在使用rvObj,您可以使用var row = rvObj[value];

获取任何行