倉庫表格
銷售 WS #1
銷售 WS #2
專案背景
努力為我的作品的庫存清單創建一個動態的 W/B。
有多個帶有資料的 W/S 和兩個用戶表單來搜索、編輯和插入新資料到相關位置。
上面顯示了 Warehouse Form 以及此任務所需的 Sales WS。我已成功呼叫了從 Sales WS 到 Userform 的欄位“Cuts”標記為 False 的所有記錄。
目標 單擊按鈕(分配給用戶表單上顯示的“全部剪切”按鈕),目標是:
a) 在 Sales WS 中找到與 Warehouse Userform 上給定行匹配的相應行。(代碼使用兩個回圈成功地做到了這一點。)
b) 在 Sales WS 上找到的行中,將“Cuts”列從 false 更改為 true。
當前代碼
//Update to "All Cut" information on the Sales Form
function updateCuts() {
let ss = SpreadsheetApp.getActiveSpreadsheet()
let shUserForm = ss.getSheetByName("Warehouse Form")
let shSalesSheet = ss.getSheetByName("Sales")
const sData = shSalesSheet.getDataRange().getValues();
const wData = shUserForm.getRange(9,3,shUserForm.getLastRow() 1,shUserForm.getLastColumn() 1).getValues();
for (var i=9; i<wData.length; i ) {
var wsRow = wData[i];
const sValue = shUserForm.getRange("C" i).getValue();
const tValue = shUserForm.getRange("E" i).getValue();
const wValue = shUserForm.getRange("G" i).getValue();
if(shUserForm.getRange("C" i).isBlank()==false){
for(var j=0; j<sData.length; j ) {
var srow = sData[j];
if (srow[0]===sValue && srow[1]===tValue && srow[2]===wValue) {
shSalesSheet.getRange("E" j).setValue(true) // Change Cut Checkbox from False to True
}}
i = 2}}
}
當前結果/問題
顯示的代碼正在更改找到的記錄上方行中的“Cuts”列值,而不是所需的記錄(如圖 Sales WS #2 所示)
問題
如何更改代碼以解決此問題?
uj5u.com熱心網友回復:
您需要setValue()at E(j 1)asj是基于 0 的索引,并且行是基于 1 的。
function updateCuts() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
const userForm = spreadsheet.getSheetByName("Warehouse Form")
const salesSheet = spreadsheet.getSheetByName("Sales")
const salesData = salesSheet.getDataRange().getValues()
userForm.getRange(9, 3, shUserForm.getLastRow()-8, 10)
.getValues()
.filter(row => row[0] !== ``)
.forEach(entry => {
const index = salesData.findIndex(row => row[0] === entry[0] && row[1] === entry[2] && row[2] === entry[4])
if (index !== -1) salesSheet.getRange(`E${index 1}`).setValue(true)
})
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/494439.html
標籤:javascript 谷歌应用脚本 代替
