我正在测试无法从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);
}
答案 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();
我无法说出为什么++之后会传递字符串,但这会解决