當索引處的其他兩列匹配值時,我試圖設定列中單元格的值。如何使用索引設定值?(<已編輯)
for (let i = 0; i < assetId.length; i ) {
for (let p = 0; p < oldId.length; p ) {
if (assetId[i] !="" && oldId[p] !="") {
if (assetId[i] == oldId[p]) {
Logger.log('Old Match: ' assetId[i])
//if match modify 4th column at row [i] to 'null'
d.getRange(i,3).setValue('null')
}
}
}
}
基于 if assetId[i] == oldId[p],我試圖將行 [i] 的 F 列更改為“null”
編輯(要求示例)

J 列是 oldId,K 是 newId

預期輸出:F4 應為空
完整代碼:
function replaceIds() {
const ss = SpreadsheetApp.getActiveSpreadsheet()
const r = ss.getSheetByName("Form Responses 1")
const d = ss.getSheetByName("Devices")
const oldId = r.getRange("J2:J").getValues().flat()
const newId = r.getRange("K2:K").getValues().flat()
const studentName = r.getRange("C2:C").getValues().flat()
const assetId = d.getRange("G3:G").getValues().flat()
const annotatedUser = d.getRange("E3:E").getValues().flat()
for (let i = 0; i < assetId.length; i ) {
for (let p = 0; p < oldId.length; p ) {
if (assetId[i] !="" && oldId[p] !="") {
if (assetId[i] == oldId[p]) {
Logger.log('Old Match: ' assetId[i])
//if match modify 4th column at row [i] to 'null'
d.getRange(i,3).setValue('null')
}
}
}
//new asset ID loop
for (let r = 0; r < newId.length; r ) {
//Logger.log(oldId[p])
if (assetId[i] !="") {
if (newId[r] !="") {
//Logger.log('## not null ##')
if (assetId[i] == newId[r]) {
Logger.log('New Match: ' assetId[i])
}
}
}
}
}
}
uj5u.com熱心網友回復:
問題:
- 問題是,使用嵌套
for回圈不是一個好主意,因為您無法正確跟蹤正確索引的位置,并且它還會不必要地重復已經訪問過的專案。
解決方案:
- 只回圈
assetId應該就足夠了,然后使用indexOfas 將幫助您確定某個元素(當前assetId)是否屬于陣列(oldIds串列)。 - 如果
assetId找到,indexOf將回傳一個非負數(這是在陣列中找到元素的索引)。 assetId由于您獲取資料的方式而排除空s- 然后您可以洗掉同一行的列,但由于
index從 0 開始并且您的資料從第 3 行開始,我們需要偏移該getRange行以使其與我們要正確洗掉的單元格匹配。
修改您當前的解決方案,這就是上面的解決方案所說的,應該可以作業。
腳本:
function replaceIds() {
const ss = SpreadsheetApp.getActiveSpreadsheet()
const r = ss.getSheetByName("Form Responses 1")
const d = ss.getSheetByName("Devices")
const oldId = r.getRange("J2:J").getValues().flat()
const newId = r.getRange("K2:K").getValues().flat()
const studentName = r.getRange("C2:C").getValues().flat()
const assetId = d.getRange("G3:G").getValues().flat()
const annotatedUser = d.getRange("E3:E").getValues().flat()
// loop your assetId
assetId.forEach(function(cell, index){
// if assetId is listed under oldId, remove annotated location of that row
// also, skip any rows where assetIds are blank
if(oldId.indexOf(cell) > -1 && cell != "")
// offset here is 3 since assetId starts at G3 and index starts at 0
// 3 - 0 = 3, which is the offset, and 6 is column F
d.getRange(index 3, 6).setValue('');
});
}
輸出:

uj5u.com熱心網友回復:
如果該索引處的 col2 值在任何行的第 10 列中,則此函式將更改 column1 中的值。您可以根據需要更改索引。
function findDataBasedOnMatch() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet0');
const sr = 2;//data start row
const vs = sh.getRange(sr, 1, sh.getLastRow() - sr 1, sh.getLastColumn()).getValues();
const col10 =vs.map(r => r[9]);//you pick the indices
vs.forEach((r,i) => {
if(~col10.indexOf(r[1])) {//you pick the indices
sh.getRange(i sr, 1).setValue('');
}
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/361501.html
標籤:谷歌应用程序脚本
