我试图获取一个单元格区域中每个单元格的值,并得到此错误:


  '错误:TypeError:在对象函数mergeAcross中找不到函数getValue。


我已经阅读了mergeAcross()的文档,但不了解它与我的问题有什么关系。我在mergeAcross()变量上使用了dataRange的相反功能,即breakApart()函数,它也无法正常工作。我也尝试过使用dataRange值创建一个变量,并在for循环中使用它,但是后来我无法获得该值所在的行。

var Ssheet = SpreadsheetApp.getActive();
var sheet = Ssheet.getSheets()[0];
var dataRange = sheet.getRange('B2:B100');
for (var ncell in dataRange){
  if (!dataRange[ncell].getValue()){
    break
  }
  var othercellVa = sheet.getRange(dataRange[ncell].getRow(),13).getValue();
  // I need to get the row of the value I'm reading
  Logger.log(dataRange[ncell].getValue());
}


我应该记录下单元格的值,但是却出现了上述错误。提前致谢。

最佳答案

尝试以下方法:

function myFunction() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheets()[0];//gets the left sheet
var rg=sh.getRange('B2:B100');
var vA=rg.getValues();
  for(var i=0;i<vA.length;i++) {
    if(!vA[i][0])  {
      break;//if null
    }
  }
  Logger.log(vA);
}


我只是想指出,在您的代码中dataRange没有值,范围只是一个单元格或相邻单元格的集合。该对象没有值。您可以使用Object.values(dataRange)对其进行测试,您将看到它仅包含方法。因此,使用这种形式的dataRange [ncell]毫无意义,因为它不包含任何值,并且所有键都是方法。因此,如果要在此范围内查找每个值的行和列,则必须先使用dataRange.getValues()获取值,然后现在有了一个二维数组。下面的示例将显示该列中每个单元格的行和列值。

function myFunction() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet177');
  var rg=sh.getRange('B2:B100');
  var vA=rg.getValues();
  for(var i=0;i<vA.length;i++) {
    if(!vA[i][0])  {
      Logger.log('no value row: %s col: %s',rg.getRow() + i, rg.getColumn());
      continue;//if null
    }else{
      Logger.log('value: %s row: %s col: %s',vA[i][0],rg.getRow() + i, rg.getColumn());
    }
  }
}

09-25 20:23