我正在嘗試為 Google 表格創建一個函式,但對比較運算子和 elseif 格式感到困惑。
該函式指向作業表中的特定單元格,并根據狀態值在作業表之間移動范圍: 螢屏截圖
我想做以下事情:
如果狀態值 =“待處理” - 將范圍移動到作業表ORDERS | 積極的
如果狀態值 = “在手” - 將范圍移動到作業表ORDERS | 完全的
如果狀態值 = “待售” - 將范圍移動到作業表SALES | 積極的
如果狀態值 = “已售出” - 將范圍移動到作業表SALES | 完全的
function onEdit(e) {
const src = e.source.getActiveSheet();
const r = e.range;
if (r.columnStart != 2 || r.rowStart == 1 || e.value == ("In Hand"));
const dest = e.source.getSheetByName('ORDERS | Complete');
src.getRange(r.rowStart,1,1,12).moveTo(dest.getRange(dest.getLastRow() 1,1,1,12));
src.deleteRow(r.rowStart);
}
謝謝
uj5u.com熱心網友回復:
您的(不完整的)代碼似乎存在一些問題,這可能是罪魁禍首:
- 您可能希望使用
r.getColumn()andr.getRow()代替評論中討論的r.columnStartand 。r.rowStart - if 陳述句中的
||運算子是 OR 運算子,我不相信你想要。您可能希望使用&&(AND) 運算子,因為這意味著 if 陳述句的主體僅在起始行/列正確且單元格值正確時才會執行。 - 似乎您可能想要使用
==運算子 forr.getColumn()而不是!=,因為您只想檢查單元格的值,前提是它是狀態列(B 列,也就是第 2 列)。 - 您的 if 陳述句似乎實際上并沒有做任何事情,因為它以分號結尾。在 JavaScript(和 Google Apps 腳本)中,分號結束陳述句,因此您的 if 陳述句將立即終止,而沒有機會執行任何邏輯。我們可以通過將其他陳述句移動到一組花括號中來解決這個問題:
function onEdit(e) {
const src = e.source.getActiveSheet();
const r = e.range;
if (r.columnStart != 2 && r.rowStart == 1 && e.value == ("In Hand")) {
const dest = e.source.getSheetByName('ORDERS | Complete');
src.getRange(r.rowStart,1,1,12).moveTo(dest.getRange(dest.getLastRow() 1,1,1,12));
src.deleteRow(r.rowStart);
}
}
- 我們可以在這里使用幾個 if-else 陳述句來為每個可能的狀態值實作邏輯,但這需要大量不必要的代碼重復。 switch-case 似乎是解決此問題的更好方法:
function onEdit(e) {
const src = e.source.getActiveSheet();
const r = e.range;
if (r.getColumn() == 2 && r.getRow() == 1 && r.getWidth() == 1 && r.getHeight() == 1) {
var sheetName;
switch (e.value) {
case "Pending":
sheetName = "ORDERS | Active";
break;
case "In Hand":
sheetName = "ORDERS | Complete";
break;
case "For Sale":
sheetName = "SALES | Active";
break;
case "Sold":
sheetName = "SALES | Complete";
break;
}
if (sheetName) {
const dest = e.source.getSheetByName(sheetName);
src.getRange(r.getRow(),1,1,12).moveTo(dest.getRange(dest.getLastRow() 1,1,1,12));
src.deleteRow(r.getRow());
}
}
}
上面的 switch-case 將單元格值與有效狀態進行比較,如果狀態有效,則設定適當的作業表名稱。然后,我們可以以任何我們想要的方式操作該表。
附帶說明:我在 if 陳述句中添加了兩個附加條件來檢查范圍大小是否為 1x1,e.value如果范圍大于單元格,則不可用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411503.html
標籤:
