gpt4 book ai didi

google-apps-script - Google Sheets onEdit 在具有不同列的工作表之间移动行

转载 作者:行者123 更新时间:2023-12-04 08:50:24 33 4
gpt4 key购买 nike

我正在尝试创建一个简单的货件处理流程,并希望使用 onEdit 复选框触发器在两个工作表(选项卡)之间移动行。
这是我的项目的链接:https://docs.google.com/spreadsheets/d/1SPO21kAyNX5fEqwkXVjmPASkfHvZ5Tzbq4s7e22VdYg/edit#gid=2005756436
基本概念是由多件组成的货件在第一张表上输入,然后复制到WB_Log 表中。在计划将什么装入卡车时,使用复选框将零件从 WB_Log 表移动到 Load_Plan 表,在该表中,它们的装载位置将在复选框右侧的列中确定。如果 cargo 中的一件或多件不能装入特定的卡车,我想取消选中 Load_Plan 上的复选框并将该行移回 WB_Log Sheet。
这是我发现几乎有效的 onEdit 函数:

function onEdit(event) {


// assumes source data in sheet named WB_Log

// target sheet of move to named Load_Plan

// getColumn with check-boxes is currently set to column 14 or N

var ss = SpreadsheetApp.getActiveSpreadsheet();

var s = event.source.getActiveSheet();

var r = event.source.getActiveRange();


if(s.getName() == "WB_Log" && r.getColumn() == 14 && r.getValue() == true) {

var row = r.getRow();

var numColumns = s.getLastColumn();

var targetSheet = ss.getSheetByName("Load_Plan");

var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);

s.getRange(row, 1, 1, numColumns).moveTo(target);

s.deleteRow(row);

} else if(s.getName() == "Load_Plan" && r.getColumn() == 14 && r.getValue() == false) {

var row = r.getRow();

var numColumns = s.getLastColumn();

var targetSheet = ss.getSheetByName("WB_Log");

var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);

s.getRange(row, 1, 1, numColumns).moveTo(target);

s.deleteRow(row);
}
}
我的问题是 Load_Plan 在复选框的右侧有列,我不想将这些列移回 WB_Log。如何调整代码,以便当复选框未选中 (False) 时,只有来自 A:N 列的信息从 Load_Plan 移回 WB_Log?
任何人都可以借出的任何建议或想法将不胜感激。

最佳答案

retrofit 要点:

  • 当我看到您共享的电子表格时,“WB_Log”表在“N”列中具有复选框。并且复选框被放置在工作表的底部。至此,targetSheet.getLastRow() + 1返回工作表底部的下一行。我认为这就是你的问题的原因。
  • 我认为在您的情况下,当检索到“B4”的最后一行后,可以使用行号。

  • 并且,在您的脚本中,“Load_Plan”表中的“A”到“O”列由 var numColumns = s.getLastColumn() 检索。 .但是“WB_Log”表具有“A”到“N”列。我认为检索到的列需要减少 1 列。

  • 当以上几点反射(reflect)到你的脚本中时,它变成如下。
    修改后的脚本:
    请按如下方式修改您的脚本。
    从:
    } else if(s.getName() == "Load_Plan" && r.getColumn() == 14 && r.getValue() == false) {

    var row = r.getRow();

    var numColumns = s.getLastColumn();

    var targetSheet = ss.getSheetByName("WB_Log");

    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);

    s.getRange(row, 1, 1, numColumns).moveTo(target);

    s.deleteRow(row);
    }
    到:
    } else if(s.getName() == "Load_Plan" && r.getColumn() == 14 && r.getValue() == false) {
    var row = r.getRow();
    var numColumns = s.getLastColumn() - 1; // Modified
    var targetSheet = ss.getSheetByName("WB_Log");
    var lastRow = targetSheet.getRange("B4").getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow(); // Added
    var target = targetSheet.getRange(lastRow + 1, 1); // Modified
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
    }
    引用:
  • getNextDataCell(direction)
  • 关于google-apps-script - Google Sheets onEdit 在具有不同列的工作表之间移动行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64130117/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com