Google App Script循环中prompt.getResponseText()二次触发无响应求助
Google App Script循环二次执行停滞问题
我编写了一段Google App Script,用于识别两个表格中不匹配的姓名。首次循环运行完全正常,但第二次循环时,虽能进入prompt输入环节,但在Sheets中完成输入后程序无反应且停滞。经排查并非输入问题(首次输入可正常执行),不清楚循环异常的原因,恳请协助解决。
代码如下:
function onEdit(e) { startPoint(); } function startPoint(){ var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("README"); var cell = "N5"; var difference = sheet.getRange(cell).getValue().toFixed(2); if (difference > 0){ yesDifference(difference); }else noDifference(difference); } function yesDifference(num){ const ui = SpreadsheetApp.getUi() const result = ui.alert( 'There is a difference of: ' + num + '\nWould you like to solve the issue', ui.ButtonSet.YES_NO) if (result == ui.Button.YES){ findDifference(num); }else{ return } } function noDifference(num){ const ui = SpreadsheetApp.getUi() const result = ui.alert( 'Tips are matching!'); return } function findDifference(num){ const ui = SpreadsheetApp.getUi(); var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("README"); var missingNames = sheet.getRange("Z3:Z20").getValues(); for(var i = 0; i < missingNames.length; i++){ var person = missingNames[i].toString(); if(person.length > 1){ const result = ui.alert( 'I am not able to match:\n' + person + '\nbetween Harri and R365 would you like to try and find them?', ui.ButtonSet.YES_NO); if(result == ui.Button.YES){ findNameMatch(person); } } } return } function findNameMatch(name){ const ui = SpreadsheetApp.getUi(); var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("README"); var allNames = sheet.getRange("A2:A100").getValues(); var filteredNames = []; for(var i = 0; i < allNames.length; i++){ var person = allNames[i].toString(); if(!(person.length > 1)){ i = allNames.length; }else{ if(!(filteredNames.includes(person))){ filteredNames.push(person); } } } var prompt = ui.prompt('Out of the following names:\n\n\n' + filteredNames.join('\r\n') + "\n\n\nPlease enter below which name is supposed to be " + name); var fullName = prompt.getResponseText().toString(); var resp = ui.alert(fullName); var firstName = fullName.substring(0, fullName.indexOf(' ')); var lastName = fullName.substring(fullName.indexOf(' ') + 1); var originalFirst = name.substring(0, name.indexOf(' ')); var originalLast = name.substring(fullName.indexOf(' ') + 1); var names = ui.alert( 'First Name: ' + firstName + "\nLast Name: " + lastName ) changeName(originalFirst, firstName, originalLast, lastName); startPoint(); } function changeName(oldF, correctF, oldL, correctL){ var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("365"); var allFNames = sheet.getRange("A2:A100").getValues(); var allLNames = sheet.getRange("B2:B100").getValues(); for(var i = 0; i < allFNames.length; i++){ var name = allFNames[i].toString(); var lastName = allLNames[i].toString(); if(!(name.length > 1)){ i = allFNames.length; }else{ if((name === oldF) &&(lastName === oldL)){ var newFirst = "A" + (i + 2); var newLast = "B" + (i + 2); var newFNames = sheet.getRange(newFirst).setValue(correctF); var newLNames = sheet.getRange(newLast).setValue(correctL); const ui = SpreadsheetApp.getUi(); const result = ui.alert( 'The names have been changed at ' + newFirst + ", and " + newLast + " to " + correctF + ", and " + correctL); i = allFNames.length; } } } return }
重现步骤
- 创建了包含最小测试数据的表格,编辑R365工作表中的任意姓名即可触发函数。
内容的提问来源于stack exchange,提问作者Matt102065
相关产品推荐
相关产品推荐

