首页 > 解决方案 > 错误:TypeError:在对象函数mergeAcross中找不到函数getValue

问题描述

我试图获取一系列单元格中每个单元格的值并得到这个错误:

'错误: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());
}

我应该记录单元格值,但我得到了上述错误。提前致谢。

标签: javascriptgoogle-apps-script

解决方案


试试这个:

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());
    }
  }
}  

推荐阅读