我对Google Script很陌生,我在工作中学习。 我有一系列数据作为变量。它只有一列,在本例中为 F 列,但值之间有空单元格。我有一个工作脚本(之前从这里得到的(,它只循环遍历包含值的单元格。因此,假设值 1 在 F5 中,值 2 在 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
如果你想知道行号,我会给你一个不同的方法
只需遍历您的值并检索非空值的位置:
...
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);
}
}
...
使用其他解决方案,您可以构建一个可以非常快速地为您完成转换的对象。
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];
的行