在工作表中搜索存储在单元格中的值失败



我是一个编程新手,我正试图完成一个不断失败的任务。我的代码在Google工作表中搜索工作表(tab1),以查找另一个工作表(tab2)中的单元格中的值。由于某些原因,搜索永远找不到值。为了简单起见,我通过将我正在寻找的值更改为一个整数而不是一个"。getvalue"来进行测试。然后,我有一个if语句,它会发出警告,显示消息" found &;和"未找到";如果没有找到的话。数据找不到。

function editRecord(){
var myGoogleSheet=SpreadsheetApp.getActiveSpreadsheet();
var shUserForm=myGoogleSheet.getSheetByName("Form");
var datasheet=myGoogleSheet.getSheetByName("Records");
var ui=SpreadsheetApp.getUi();
var response=ui.alert("Submit", 'Do you want to submit your data?', ui.ButtonSet.YES_NO);
var str=shUserForm.getRange("F7").getValue();
var values=datasheet.getDataRange().getValues();
var valuesFound=false;
if(response==ui.Button.NO){

return;
}

for (var i=0;i<values.length;i++){
if (values[i][1]==str){
var iRow=i+1;

datasheet.getDataRange(iRow,5).setValue(shUserForm.getDataRange("F15").getValue());
datasheet.getDataRange(iRow,6).setValue(shUserForm.getDataRange("F17").getValue());
datasheet.getDataRange(iRow,7).setValue(shUserForm.getDataRange("F19").getValue());
ui.alert("Data updated.");

shUserForm.getDataRange("F15").clearContent;
shUserForm.getDataRange("F17").clearContent;
shUserForm.getDataRange("F19").clearContent;
shUserForm.getDataRange("F21").clearContent;
shUserForm.getDataRange("F23").clearContent;
shUserForm.getDataRange("F25").clearContent;
valuesFound=true;
return;
}
if (valuesFound==false){

ui.alert("Your ID was not found.");

return;
}
}

}

修改点:

  • 我认为在你的脚本中,通过if (valuesFound==false){}return,当values[i][1]==strfalse时,for循环完成。例如,当values[i][1]==strvalues的第一行为false时,for循环就结束了。我想这可能是你的问题的原因。

  • 关于datasheet.getDataRange(iRow, 5)getDataRange(iRow, 5),不幸的是,getDataRange没有参数。我想这部分也有错误。

  • 关于shUserForm.getDataRange("F15").clearContentclearContent,在此例中,没有运行clearContent的方法。

如果要搜索值,如何修改如下?

修改脚本1:

当您的脚本被修改后,它变成如下所示:

function editRecord() {
var myGoogleSheet = SpreadsheetApp.getActiveSpreadsheet();
var shUserForm = myGoogleSheet.getSheetByName("Form");
var datasheet = myGoogleSheet.getSheetByName("Records");
var ui = SpreadsheetApp.getUi();
var response = ui.alert("Submit", 'Do you want to submit your data?', ui.ButtonSet.YES_NO);
var str = shUserForm.getRange("F7").getValue();
var values = datasheet.getDataRange().getValues();
var valuesFound = false;
if (response == ui.Button.NO) {
return;
}
for (var i = 0; i < values.length; i++) {
if (values[i][1] == str) {
var iRow = i + 1;
datasheet.getRange(iRow, 5).setValue(shUserForm.getRange("F15").getValue());
datasheet.getRange(iRow, 6).setValue(shUserForm.getRange("F17").getValue());
datasheet.getRange(iRow, 7).setValue(shUserForm.getRange("F19").getValue());
ui.alert("Data updated.");
shUserForm.getRange("F15").clearContent();
shUserForm.getRange("F17").clearContent();
shUserForm.getRange("F19").clearContent();
shUserForm.getRange("F21").clearContent();
shUserForm.getRange("F23").clearContent();
shUserForm.getRange("F25").clearContent();
valuesFound = true;
return;
}
}
if (valuesFound == false) {
ui.alert("Your ID was not found.");
return;
}
}

修改脚本2:

我以为在你的脚本中,getValuesetValue在循环中使用。在这种情况下,过程成本将变得很高。那么,作为另一个修改过的脚本,下面的修改如何?

unction editRecord() {
var myGoogleSheet = SpreadsheetApp.getActiveSpreadsheet();
var shUserForm = myGoogleSheet.getSheetByName("Form");
var datasheet = myGoogleSheet.getSheetByName("Records");
var ui = SpreadsheetApp.getUi();
var response = ui.alert("Submit", 'Do you want to submit your data?', ui.ButtonSet.YES_NO);
var str = shUserForm.getRange("F7").getValue();
if (response == ui.Button.NO) {
return;
}
var res = datasheet.getRange("B1:B" + datasheet.getLastRow()).createTextFinder(str).matchEntireCell(true).findNext();
if (!res) {
ui.alert("Your ID was not found.");
return;
}
var [[v1],,[v2],,[v3]] = shUserForm.getRange("F15:F19").getValues();
datasheet.getRange(res.getRow(), 5, 1, 3).setValues([[v1, v2, v3]]);
shUserForm.getRangeList(["F15","F17","F19","F21","F23","F25"]).clearContent();
SpreadsheetApp.flush();
ui.alert("Data updated.");
}
  • 在本例中,使用TextFinder搜索该值。并且,使用RangeList清除单元格。

引用:

  • getRange(行、列)
  • clearContent ()
  • createTextFinder (findText)

最新更新