我有一個 onEdit 函式,它創建一個陣列并使用 Range.setValues 將該行“移動”到另一個作業表。
function onEdit(e) {
const src = e.source.getActiveSheet();
const r = e.range;
if (r.getColumn() == 2 && r.getRow() == 2 && r.getWidth() == 1 && r.getHeight() == 1) {
var sheetName;
switch (e.value) {
case "Pending":
sheetName = "Pending";
break;
case "In Hand":
sheetName = "In Hand";
break;
}
if (sheetName) {
const dest = e.source.getSheetByName(sheetName);
const srcRange = src.getRange(r.getRow(),1,1,18);
const formulas = srcRange.getFormulas()[0];
const values = srcRange.getValues();
formulas.forEach((formula,i) => {
if(formula !== '') values[0][i] = formula;
});
dest.getRange(dest.getLastRow() 1,1,1,18)).setValues(values);
src.deleteRow(r.getRow();
}
}
}
該功能有效,但目前它僅檢查此處顯示的第 2 列 - 第 2 行:

如果我更改以下狀態,則不會發生任何事情:

我知道這是因為該函式沒有檢查整個列,它只檢查活動作業表 - 第 2 列 - 第 2 行中的值變化。
我需要幫助的是調整范圍并確保檢查整個第 2 列 - 如果第 5 行中的狀態發生更改,則移動第 5 行資料 - 依此類推。
uj5u.com熱心網友回復:
在以下行中替換r.getRow() == 2為r.getRow() >= 2
if (r.getColumn() == 2 && r.getRow() == 2 && r.getWidth() == 1 && r.getHeight() == 1) {
以上是因為第一行具有列標題,并且您不太可能希望移動標題行以防編輯 B 列的列標題。
資源
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators
uj5u.com熱心網友回復:
您的代碼中的 if 條件僅在用戶由于此條件而在作業表的第 2 行 B 列中編輯了一個單元格時才有效r.getRow() == 2。
如果要檢查從第 2 行開始的整列,請更改代碼
從:
if (r.getColumn() == 2 && r.getRow() == 2 && r.getWidth() == 1 && r.getHeight() == 1) {
到:
if (r.getColumn() == 2 && r.getRow() > 1 && r.getWidth() == 1 && r.getHeight() == 1) {
這將確保腳本僅在從第 2 行開始在 B 列中編輯單元格時應用“移動”邏輯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416115.html
標籤:
