我試圖解決的問題涉及一個帶有兩個獨立子表的谷歌表,稱為“設備”和“表單回應”。我正在嘗試自動執行 Google 表單回應以更新作業表。表單回應表提供了三個相關列:user_name、舊資產 ID 和新資產 ID。在設備表中有兩個相關的列:用戶名和資產 ID。我希望腳本決議設備表中的資產 ID 列,以從舊資產 ID 串列中查找匹配項。如果匹配,則應將該欄位替換為“”,然后在“設備”串列中找到新資產 ID,并將表單回應中提供的 user_name 分配給該行。
表單回復:
| 用戶名 | 舊資產 ID | 新資產 ID |
|---|---|---|
| 喬 | 1234 | 9876 |
設備:
| 用戶名 | 資產編號 |
|---|---|
| 喬 | 1234 |
| 空值 | 9876 |
腳本后的設備:
| 用戶名 | 資產編號 |
|---|---|
| 空值 | 1234 |
| 喬 | 9876 |
如果一個欄位為空,我目前嘗試這樣做的方式會產生錯誤,所以我真的在尋找正確方向的推動。我有編程經驗,但應用程式腳本與我使用過的其他語言不同,而且我很難找到有關它的檔案。我在實作我通常使用的邏輯時遇到了麻煩。
uj5u.com熱心網友回復:
你可能可以從這樣的事情開始:
function onFormSubmit(e) {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Device');
const sr = 2;//data start row
const hr = 1;//header row
const hA = sh.getRange(hr, 1, 1, sh.getLastColumn()).getValues()[0];
let idx = {};
hA.forEach((h, i) => { idx[h] = i; });
let found = false;
const vs = sh.getRange(sr, 1, sh.getLastRow() - sr 1, sh.getLastColumn()).getValues();
for (let i = 0; i < vs.length; i ) {
let r = vs[i];
if (r[idx['asset ID']] == e.namedValues['old asset ID'][0]) {
sh.getRange(i sr, idx['user_name'] 1).setValue('');
found == true;
break;
}
}
if (found) {
for (let i = 0; i < vs.length; i ) {
let r = vs[i];
if (r[idx['asset ID']] == e.namedValues['new asset ID']) {
sh.getRange(i sr, idx['user_name'] 1).setValue(e.namedValues['user_name'][0]);
break;
}
}
}
}
uj5u.com熱心網友回復:
嘗試這個:
這里我使用

未找到新 ID:


發現舊 ID 和新 ID:


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/345911.html
