无法从undefined中读取属性“0”。 Google Apps脚本错误

时间:2014-07-31 13:06:16

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

我正在测试无法从undefined中读取属性“0”。第16行出错。(while(colunaDias [emptyCell] [0]< = dias))

谷歌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);


}

3 个答案:

答案 0 :(得分:2)

我猜测colunaDias[emptyCell]未定义。它通过了第一个while条件,因为&#34;未定义&#34;不等于&#34;&#34;。如果colunaDias[emptyCell]未定义,那么此行有问题:

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

colunaDias[emptyCell][0]

其中&#34; emptyCell&#34;是16是问题。 getValues()返回一个矩形网格值的对象。我会通过检查[0] [0]来测试矩形网格中是否有任何东西。

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

如果没有数据,那么某些内容就失败了:

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

如果该行有效,那么更高的东西是错误的。

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

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

答案 1 :(得分:2)

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

在第一个while

之前添加此行
Logger.log('emptyCell = '+emptyCell+'  and colunaDias.length = '+colunaDias.length);

我测试了您的脚本副本,除非我定义emptyCell&gt;在1000行表上1000。

答案 2 :(得分:2)

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

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

RelistFixedPriceItemCall relistFP = new RelistFixedPriceItemCall(context);
GetItemCall oGetItemCall = new GetItemCall(context);
ItemType existItem = oGetItemCall.GetItem("someitemId");
existItem.Quantity = 1; //change stock to 1
relistFP.Item = existItem;
relistFP.Execute();

我无法说出为什么++之后会传递字符串,但这会解决