TypeError:无法从未定义的工作表脚本中读取属性“ length”

时间:2018-11-05 17:22:30

标签: google-apps-script google-sheets

我正在尝试复制this example sheet中使用的脚本 目标是将一个数据单元格按“,”分割成多个行,以维护该行中相应列的数据。

运行脚本时,我不断收到以下错误消息:

  

TypeError:无法从未定义中读取属性“ length”。 (第6行,文件“代码”)

function result(range) {
  delimiter = ", "
  targetColumn = 1

  var output2 = [];
  for(var i=0, iLen=range.length; i<iLen; i++) {
    var s = range[i][targetColumn].split(delimiter);    
    for(var j=0, jLen=s.length; j<jLen; j++) {
      var output1 = []; 
      for(var k=0, kLen=range[0].length; k<kLen; k++) {
        if(k == targetColumn) {
          output1.push(s[j]);
        } else {
          output1.push(range[i][k]);
        }
      }
      output2.push(output1);
    }    
  }
  return output2;
}

1 个答案:

答案 0 :(得分:0)

嗯,我认为这是您要尝试完成的事情,因此也许这个简单的示例会有所帮助。该函数查看第4列,并将逗号分隔的值拆分为数组tA,然后为每个值创建一个单独的行,并在其他列中使用相同的值。

在运行之前,这是我的数据:

enter image description here

运行后,这是我的数据:

enter image description here

这是我的代码:

function splitDataIntoSeparateRows() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  for(var i=0;i<vA.length;i++){
    var tA=vA[i][3].split(',');
    if(tA.length>1){
      for(var j=0;j<tA.length;j++){
        var vB=[vA[i][0],vA[i][1],vA[i][2],tA[j]];
        if(j==0){
          vA.splice(i + j,1,vB);
        }else{
          vA.splice(i + j,0,vB);
        }
      }
    }
  }
  sh.clearContents();
  sh.getRange(1,1,vA.length,vA[0].length).setValues(vA);
}

您可能需要看一下文档,以了解该功能如何为您自己工作。