我有一个函数,该函数的名称带有一组数据,并且将该名称与名称列表进行比较。如果该名称已在名称列表中,则与该名称关联的数据将替换旧数据。如果名称不是名称列表中的名称,则会将名称和相关信息添加到列表底部。
由于某种原因,当我使用列表中已经存在的名称运行代码时,原始数据将被替换,名称和数据将添加到列表的底部。我想避免重复别人,同时还要增加新的个人。
var app = SpreadsheetApp;
var activeSheet = app.getActiveSpreadsheet();
var lookup = app.getActiveSpreadsheet().getSheetByName("Lookup");
var issued = app.getActiveSpreadsheet().getSheetByName("Issued");
var name1 = lookup.getRange(12,3).getValue();
var info = lookup.getRange(16,3,1,12).getValues();
for (var j=1;j<105;j++){
var issuedOfficers = issued.getRange(j,11).getValue();
//if the officers name is already recorded in issued the system will replace the current data with updated data
if (issuedOfficers === name1){
issued.getRange(j,1,1,12).setValues(info);
} else {
var lastrow = issued.getLastRow();
issued.getRange(lastrow+1,1,1,12).setValues(info);
break;
}
}
}```
答案 0 :(得分:0)
该修改如何?
在您的脚本中,
j
为1
并且issuedOfficers === name1
为true
时,运行issued.getRange(j,1,1,12).setValues(info)
。并且,当j
为2
并且issuedOfficers === name1
为false
时,运行issued.getRange(lastrow+1,1,1,12).setValues(info)
。并且for循环已完成。j
为1
并且issuedOfficers === name1
为false
时,运行issued.getRange(lastrow+1,1,1,12).setValues(info)
。并且for循环已完成。我认为这是您遇到问题的原因。为了避免此问题,如何进行以下修改?
for (var j=1;j<105;j++){
var issuedOfficers = issued.getRange(j,11).getValue();
//if the officers name is already recorded in issued the system will replace the current data with updated data
if (issuedOfficers === name1){
issued.getRange(j,1,1,12).setValues(info);
} else {
var lastrow = issued.getLastRow();
issued.getRange(lastrow+1,1,1,12).setValues(info);
break;
}
}
至:
var names = issued.getRange(1, 11, 105, 1).getValues().flat();
var index = names.indexOf(name1);
if (index > -1) {
issued.getRange(index + 1,1,1,12).setValues(info);
} else {
issued.appendRow(info[0]);
}
issued
的工作表中检索值,然后检查值中是否包含name1
。这样,将更新行或附加值。