データのセットを持つ名前を持つ関数があり、この名前が名前のリストと比較されます。その名前がすでに名前のリストにある場合、その名前に関連付けられているデータが古いデータを置き換えます。名前が名前のリストにない名前である場合、名前と関連情報がリストの一番下に追加されます。
何らかの理由で、すでにリストにある名前でコードを実行すると、元のデータが置き換えられ、名前とデータがリストの一番下に追加されます。新しい個人を追加しながら、人を繰り返すことは避けたいです。
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;
}
}
}```
この変更はどうですか?
スクリプトでは、
j
is1
とissuedOfficers === name1
isの場合true
、issued.getRange(j,1,1,12).setValues(info)
が実行されます。そして、j
is2
とissuedOfficers === name1
isのfalse
場合、issued.getRange(lastrow+1,1,1,12).setValues(info)
が実行されます。そして、forループが終了します。j
is1
とissuedOfficers === name1
isの場合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
がチェックされます。これにより、行が更新されるか、値が追加されます。この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加