应用程序脚本陷入循环?
apps script stuck in loop?
我的代码可以正常工作,但后来我更改了一些列并更新了脚本。现在这个函数似乎陷入了循环。基本上,当新行添加到 table 时,我的脚本应该 运行 一次。 (我通过 IFTTT 触发器添加新行。)下面的函数计划触发 onchange()
function phototable() {
var ss = SpreadsheetApp.openById('###').getSheetByName('IFTTT');
var lastRow = ss.getLastRow();
var imageID = 'MID(C'+lastRow+',32,33)';
var name = ss.getRange('G'+lastRow);
var address = ss.getRange('H'+lastRow);
var phone = ss.getRange('I'+lastRow);
var email = ss.getRange('J'+lastRow);
ss.getRange('D'+lastRow).setValue('=HYPERLINK(CONCATENATE("https://drive.google.com/file/d/"&'+imageID+'),'+imageID+')'); //ss.getRange('D'+lastRow).setFormula('MID(C'+lastRow+',32,33)');
ss.getRange('E'+lastRow).setFormula('LEFT(B'+lastRow+',8)');
name.setValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/###","Form Responses!R:AA"),7,false)');
address.setValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/###","Form Responses!R:AA"),8,false)');
phone.setValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/184C3kCDDv2sCElQB-INIyzTvmx8oNDXF0xqO7AH7xs8","Form Responses!R:AA"),9,false)');
email.setValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/###","Form Responses!R:AA"),10,false)');
SpreadsheetApp.flush();
name.copyTo(name,{contentsOnly:true});
address.copyTo(address,{contentsOnly:true});
phone.copyTo(phone,{contentsOnly:true});
email.copyTo(email,{contentsOnly:true});
var key = ss.getRange('F'+lastRow);
key.setValue('=DEC2HEX(RANDBETWEEN(0, 4294967295), 8)');
SpreadsheetApp.flush();
key.copyTo(key,{contentsOnly:true});
for(var row=lastRow;row>1;row--){
if(ss.getRange('B'+row).isBlank()){
ss.deleteRow(row);}
}
}
脚本 运行s 并产生了正确的值,但它似乎陷入了一个永无止境的循环,因为它不断地创建一个新的 key
并检索列 G:J 的值.
这是我的 table:
有什么想法吗?我尝试了 onedit() 触发器,但实际上并没有触发该功能。
这是我的处决页面:
可能是 ss.deleteRow(row)
触发了您的 on change 触发器。另一种可能的情况是 IFTTT 多次触发 on on change 触发器。无论如何请尝试以下操作:
替换
function phototable(){
来自
function phototable(e){
if(e.changeType !== 'INSERT_ROW') return;
以上代码将使其余代码仅在插入新行时执行。
副作用是您将无法直接执行该功能,但您可以使用以下方法
function test_phototable(){
var e = {changeType:'INSERT_ROW'};
phototable(e);
}
我的代码可以正常工作,但后来我更改了一些列并更新了脚本。现在这个函数似乎陷入了循环。基本上,当新行添加到 table 时,我的脚本应该 运行 一次。 (我通过 IFTTT 触发器添加新行。)下面的函数计划触发 onchange()
function phototable() {
var ss = SpreadsheetApp.openById('###').getSheetByName('IFTTT');
var lastRow = ss.getLastRow();
var imageID = 'MID(C'+lastRow+',32,33)';
var name = ss.getRange('G'+lastRow);
var address = ss.getRange('H'+lastRow);
var phone = ss.getRange('I'+lastRow);
var email = ss.getRange('J'+lastRow);
ss.getRange('D'+lastRow).setValue('=HYPERLINK(CONCATENATE("https://drive.google.com/file/d/"&'+imageID+'),'+imageID+')'); //ss.getRange('D'+lastRow).setFormula('MID(C'+lastRow+',32,33)');
ss.getRange('E'+lastRow).setFormula('LEFT(B'+lastRow+',8)');
name.setValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/###","Form Responses!R:AA"),7,false)');
address.setValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/###","Form Responses!R:AA"),8,false)');
phone.setValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/184C3kCDDv2sCElQB-INIyzTvmx8oNDXF0xqO7AH7xs8","Form Responses!R:AA"),9,false)');
email.setValue('=VLOOKUP("Form Responses_Images/"&B'+lastRow+',importrange("https://docs.google.com/spreadsheets/d/###","Form Responses!R:AA"),10,false)');
SpreadsheetApp.flush();
name.copyTo(name,{contentsOnly:true});
address.copyTo(address,{contentsOnly:true});
phone.copyTo(phone,{contentsOnly:true});
email.copyTo(email,{contentsOnly:true});
var key = ss.getRange('F'+lastRow);
key.setValue('=DEC2HEX(RANDBETWEEN(0, 4294967295), 8)');
SpreadsheetApp.flush();
key.copyTo(key,{contentsOnly:true});
for(var row=lastRow;row>1;row--){
if(ss.getRange('B'+row).isBlank()){
ss.deleteRow(row);}
}
}
脚本 运行s 并产生了正确的值,但它似乎陷入了一个永无止境的循环,因为它不断地创建一个新的 key
并检索列 G:J 的值.
这是我的 table:
有什么想法吗?我尝试了 onedit() 触发器,但实际上并没有触发该功能。
这是我的处决页面:
可能是 ss.deleteRow(row)
触发了您的 on change 触发器。另一种可能的情况是 IFTTT 多次触发 on on change 触发器。无论如何请尝试以下操作:
替换
function phototable(){
来自
function phototable(e){
if(e.changeType !== 'INSERT_ROW') return;
以上代码将使其余代码仅在插入新行时执行。
副作用是您将无法直接执行该功能,但您可以使用以下方法
function test_phototable(){
var e = {changeType:'INSERT_ROW'};
phototable(e);
}