【问题标题】:Cannot read property "0" from undefined. Error Google Apps Script无法从未定义中读取属性“0”。错误 Google Apps 脚本
【发布时间】:2018-08-16 21:05:28
【问题描述】:

我得到无法从未定义中读取属性“0”。第 16 行出错。(while (colunaDias[emptyCell][0]

应该是google SpreadSheets 的一个非常简单的功能。我看不出我做错了什么......

奇怪的是,如果我不使用变量“dias”而是使用整数。 while 函数有效....

function myFunction() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var leadsSheet = ss.getSheetByName("Leads Todas as Categorias, menos outros - Days (5days)");
  var targetSheet = ss.getSheetByName("feticaria");

  var cellLeads = leadsSheet.getRange(1,1).getValue();
  //var cellTarget = targetSheet.getRange(1,1).setValue(valor);

  var colunaDias = leadsSheet.getRange('B:B').getValues();
  var sourceMedium = leadsSheet.getRange('A:A').getValues();
  var emptyCell = 16;
  var dias = 1;

  while (colunaDias[emptyCell][0] != ""){
    while (colunaDias[emptyCell][0] <= dias){
        dias++;
        emptyCell++;
    }


    emptyCell++;

  }

  Logger.log(emptyCell);


}

【问题讨论】:

    标签: javascript google-apps-script google-sheets


    【解决方案1】:

    我认为唯一可能导致该错误的是emptyCell 是否大于colunaDias 数组,即如果您的工作表小于 16 行(如果您在此处显示的值是正确的)。

    在第一个 while 之前添加这一行:

    Logger.log('emptyCell = '+emptyCell+'  and colunaDias.length = '+colunaDias.length);
    

    我测试了您的脚本副本,它运行没有错误,除非我在 1000 行工作表上定义 emptyCell > 1000。

    【讨论】:

      【解决方案2】:

      我猜colunaDias[emptyCell] 是未定义的。它通过了第一个while 条件,因为“未定义”不等于“”。如果colunaDias[emptyCell] 未定义,则说明此行有问题:

      var colunaDias = leadsSheet.getRange('B:B').getValues();
      

      colunaDias[emptyCell][0]
      

      “emptyCell”是 16 是问题所在。 getValues() 返回一个矩形网格对象。我会通过检查 [0][0] 来测试矩形网格中是否有任何东西。

      Logger.log('is there any data? ' + colunaDias[0][0])
      

      如果没有数据,则在线失败:

      var colunaDias = leadsSheet.getRange('B:B').getValues();
      

      如果那条线正常工作,那么上面的东西是错误的。

      您应该检查 getSheetByName 的返回类型是否为 null。

      // The code below will log the index of a sheet named "YourSheetName"
      var leadsSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("YourSheetName");
      if (leadsSheet != null) {
        Logger.log(leadsSheet.getIndex());
      }
      

      【讨论】:

        【解决方案3】:

        我在几年前就知道这篇文章,但这是最接近我遇到的问题的地方。我只是想发布我的答案,以防有一天其他人在这里结束。

        由于某种原因,检查变量“dias”作为字符串传递。 这就是为什么用数字替换它允许脚本运行的原因。

        dias = parseInt(dias);    //use this before the variable needs to be read
        

        我不能说为什么它在 ++ 之后传递了一个字符串,但这会解决它

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多