Javascript 谷歌应用程序电子表格脚本随机停止?
我已经编写了一个简单的谷歌应用程序电子表格脚本,它在某些行中获取详细信息,并将其转换为单个列表;一切都很简单。问题是脚本一直在随机点停止,循环永远不会结束-没有错误消息,脚本编辑器顶部的消息仍然指示它正在运行,但它已明显停止 我最初认为它可能被某种方式限制了,但随机停止点(有时在源工作表第6x行,有时在第7x行,有时在数百行)和缺少错误消息表明情况并非如此 有人能帮我弄清楚为什么会这样吗?是因为我正在脚本编辑器窗口中运行它吗?是否有其他原因(可能是网络问题)导致应用程序脚本停止运行,如果是,是否可以在后台或类似环境中运行以防止出现这种情况 谢谢Javascript 谷歌应用程序电子表格脚本随机停止?,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我已经编写了一个简单的谷歌应用程序电子表格脚本,它在某些行中获取详细信息,并将其转换为单个列表;一切都很简单。问题是脚本一直在随机点停止,循环永远不会结束-没有错误消息,脚本编辑器顶部的消息仍然指示它正在运行,但它已明显停止 我最初认为它可能被某种方式限制了,但随机停止点(有时在源工作表第6x行,有时在第7x行,有时在数百行)和缺少错误消息表明情况并非如此 有人能帮我弄清楚为什么会这样吗?是因为我正在脚本编辑器窗口中运行它吗?是否有其他原因(可能是网络问题)导致应用程序脚本停止运行,如果是,是否
函数convertTrimsToList(){
var ss=SpreadsheetApp.openById(“[redact]”);
var sheet=ss.getSheets()[0];
var News=电子表格应用程序。创建(“MMT列表”);
var newsheet=news.getSheets()[0]
x=1;
z=1;
i=1;
q=1;
while(sheet.getRange(x,1).getValue()!=“”)
{
表.getRange(1,6).setValue(“处理行”+x);
y=5;
while(sheet.getRange(x,y).getValue()!=“”)
{
表.getRange(1,7).setValue(“处理行”+y);
如果(x!=1)
{
如果(y==5&&sheet.getRange(x,1).getValue()!=sheet.getRange((x-1),1).getValue())
{
我++
}
}
newsheet.getRange(z,1).setValue(i);
newsheet.getRange(z,2).setValue(q);
newsheet.getRange(z,3).setValue(sheet.getRange(x,y).getValue());
z++
y++
}
如果(x!=1)
{
if(sheet.getRange(x,3).getValue()!=sheet.getRange((x-1),3).getValue())
{
q++
}
}
其他的
{
q++
}
x++
}
}
您的代码效率很低。每次打电话给服务都很昂贵。这可能就是代码突然停止的原因。一种更有效的方法是将所有数据读入2D数组,然后在两个嵌套循环后一次性回写到电子表格中 事实证明,这与这里发生的问题是一样的:-我不确定为什么没有收到错误消息,但似乎是同一个问题,所以我重构了代码以纠正它
function convertTrimsToList(){
var ss = SpreadsheetApp.openById("[REDACTED]");
var sheet = ss.getSheets()[0];
var newss = SpreadsheetApp.create("MMT List");
var newsheet = newss.getSheets()[0];
x = 1;
z = 1;
i = 1;
q = 1;
while (sheet.getRange(x,1).getValue() != "")
{
sheet.getRange(1,6).setValue("Processing row " + x);
y = 5;
while (sheet.getRange(x,y).getValue() != "")
{
sheet.getRange(1,7).setValue("Processing row " + y);
if (x != 1)
{
if (y == 5 && sheet.getRange(x,1).getValue() != sheet.getRange((x-1),1).getValue())
{
i++
}
}
newsheet.getRange(z,1).setValue(i);
newsheet.getRange(z,2).setValue(q);
newsheet.getRange(z,3).setValue(sheet.getRange(x,y).getValue());
z++
y++
}
if (x != 1)
{
if (sheet.getRange(x,3).getValue() != sheet.getRange((x-1),3).getValue())
{
q++
}
}
else
{
q++
}
x++
}
}