我正在開發一個計數器系統,該系統同時具有每周專案列和所有時間專案數列。為了提高效率,我組裝了一個系統,允許用戶輸入他們想在每周列中添加多少,在代碼中:將其添加到每周和所有時間,確定是否添加的數量會導致每周數量超過每周的最大值(12),如果這樣,只會增加限制(例如,每周計數器為 8 并且用戶嘗試添加 5,系統覆寫并且僅在兩列中添加 4 )。下面是說的代碼:
function onEdit(e) {
//stores the row and column value of cell edited
var row = e.range.getRow();
var col = e.range.getColumn();
//stores the name of sheets used, pri is input data is output
var priSheet1 = "Sheet1"
var dataSheet1 = "Sheet1"
//stores the columns of the cells we're interested in, m is input d is output
var mcol1 = 6
var mcol2 = 7
var dcol1 = 7
var dcol2 = 18
var dcol3 = 20
var dCell = e.source.getSheetByName(dataSheet1).getRange(row, mcol2).getValue();
//determines if cell edited is in both the sheet and column we're interested in
if(col == mcol1 && e.source.getActiveSheet().getName() === priSheet1 && e.value != 0){
e.source.getSheetByName(dataSheet1).getRange(row, dcol3).setValue(e.oldValue);
var sum = e.source.getSheetByName(dataSheet1).getRange(row, dcol3).getValue() e.value
if(sum <= 12){
e.source.getSheetByName(dataSheet1).getRange(row, dcol1).setValue(e.value dCell);
e.source.getSheetByName(dataSheet1).getRange(row, mcol1).setValue(sum);
e.source.getSheetByName(dataSheet1).getRange(row, dcol2).setValue(new Date());
}else if(sum > 12){
var overflow = 12 - e.oldValue
e.source.getSheetByName(dataSheet1).getRange(row, dcol1).setValue(overflow dCell);
e.source.getSheetByName(dataSheet1).getRange(row, mcol1).setValue(12);
if(e.oldValue == 12){
}else if(e.oldValue != 12){
e.source.getSheetByName(dataSheet1).getRange(row, dcol2).setValue(new Date());
}
}
}else if(col == mcol1 && e.source.getActiveSheet().getName() === priSheet1 && e.value == 0){
e.source.getSheetByName(dataSheet1).getRange(row, mcol1).setValue(0);
}
}
但是,在添加 e.oldValue 和 e.Value 時運行它會產生奇怪的值:[value logs]
(值是 e.oldValue,未觸及的所有時間值,e.value,e.value 和 e.oldValue 的總和,以及最終所有計算后的時間值)。當您添加更多數字時,總和也開始變得奇怪(當 1 已經存在時添加 2 分別導致 12 和 210)。這是通過多種編碼方法發生的,我不知所措。
uj5u.com熱心網友回復:
e.oldValue并且e.value可能回傳“意外”值,即在 Google 表格中,當在算術運算中使用單元格值時,空白單元格被“轉換”為 0,例如對單元格 A1 和 A1 進行加法運算的公式:=A1 A2。
如果單元格為空白,然后被編輯,e.oldValue將回傳undefined,而不是 0。如果單元格有值,則將其清除,e.value將回傳undefined。
在 JavaScript 中,二元運算子有兩種“模式”,算術加法運算子和字串連接運算子。為了防止“奇怪”的結果,您可能需要驗證資料型別或將值強制為所需的資料型別。IE:您可以使用Number(value)轉換"4"為4. 你可以isNaN(value)用來檢查是否value是一個數字。
此外,
- 谷歌表格對它可以處理的數字有限制。
- 在某些情況下,
onEdit可能不會被觸發。
有關的
- Javascript 中的型別強制究竟是什么?
- 為什么 JavaScript 以不同方式處理字串和數字之間的加號和減號運算子?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/516881.html
