Google apps script Google脚本,for循环在达到条件之前停止,导致它无法继续通过未检查的数据
我试图从我正在编辑的工作表中获取一个值,并将其与另一个包含另一个值的工作表单元格进行比较,以查看它是否匹配,一切似乎都运行得很好,但一旦for循环开始,它在停止之前只经过大约90-100行,使其无法等于设置的条件,我把它打印到一个空的手机上,告诉我它到底经历了什么,直到它慢慢地进入列表Google apps script Google脚本,for循环在达到条件之前停止,导致它无法继续通过未检查的数据,google-apps-script,Google Apps Script,我试图从我正在编辑的工作表中获取一个值,并将其与另一个包含另一个值的工作表单元格进行比较,以查看它是否匹配,一切似乎都运行得很好,但一旦for循环开始,它在停止之前只经过大约90-100行,使其无法等于设置的条件,我把它打印到一个空的手机上,告诉我它到底经历了什么,直到它慢慢地进入列表 var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheetMasterList = ss.getSheetByName("Master Item List"
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetMasterList = ss.getSheetByName("Master Item List");
var sheetItems = ss.getSheetByName("Items");
function onEdit(event){
if (ss.getActiveSheet().getName() == "Master Item List"){
var r = event.range;
var v = event.value;
checkColumnIfEditedI(r,v);
}
}
function checkColumnIfEditedI(gotRange,value){
// Get the row and column
var columnOfEditedRange = gotRange.getColumn();
var rowOfEditedRange = gotRange.getRow();
var valueOfEditedRange = value;
if (columnOfEditedRange == 1){
var lastRowInItems = sheetItems.getLastRow();
for (i=lastRowInItems; i>=0; i--){
var rowChecked = sheetItems.getRange(i, 4).getValue();
if (rowChecked == valueOfEditedRange){
sheetMasterList.getRange(2, 17).setValue("Found your row");
break
}else{
sheetMasterList.getRange(2, 17).setValue("Caching: \nRow " + i + " Column 4" + "\nResult " + rowChecked);
}
}
}else{
sheetMasterList.getRange(30, 1).setValue("Not the correct Row");
}
}
// Check which cell has been edited (Master Items List) DONE
// If Master Items List was edited check what cell and row was edited DONE
// Check if Items sheet has said item
// If item in Items sheet does not exist set "Not in cell"
// If item in Items sheet does exist set "In Cell" and link to the Items sheet data.
我承认可能有一种更简单的方法来完成我所做的所有这些代码,但如果你想修复它并使其成为无用的行,它对我很有用。我全神贯注:D函数onEdit(e){
function onEdit(e){
var sh=e.range.getSheet();
if (sh.getName()=="Master Item List"){
var sheetMasterList=e.source.getSheetByName("Master Item List");
var sheetItems=e.source.getSheetByName("Items");
if (e.range.columnStart==1){
var vA=sheetItems.getRange(1,4,sheetItems.getLastRow(),1).getValues();
for(var i=0;i<vA.length;i++) {
if(vA[i][0]==e.value) {
sheetMasterList.getRange(2,17).setValue("Found your row");
break;
}else{
sheetMasterList.getRange(2, 17).setValue("Caching: \nRow " + Number(i+1) + " Column 4" + "\nResult " + vA[i][0]);//this would run a lot faster with out this line.
}
}
}else{
sheetMasterList.getRange(30,1).setValue("Not the correct Row");
}
}
}
var sh=e.range.getSheet();
如果(sh.getName()=“主项目列表”){
var sheetMasterList=e.source.getSheetByName(“主项目列表”);
var sheetItems=e.source.getSheetByName(“项目”);
if(e.range.columnStart==1){
var vA=sheetItems.getRange(1,4,sheetItems.getLastRow(),1.getValues();
对于(var i=0;iIt按照我的预期工作,非常感谢!你能不能快速向我解释一下为什么我的方法不起作用?我不确定我做错了什么,因为它正在检查工作表,但没有完成。此外,如果找不到该项,它只会显示包含其开始数据的最后一行。很难识别exac如果没有工作表的副本,问题可能是由于大量数据减慢了脚本的速度,您正在到达。我看到了一些可能的改进,例如在for
循环之外声明rowChecked
,或者将I>=0
设置为I>0
,因为工作表中没有0
行。