Google apps script 如何根据复选框值将范围复制到其他工作表,然后在新工作表上删除,同时使两个复选框保持最新

Google apps script 如何根据复选框值将范围复制到其他工作表,然后在新工作表上删除,同时使两个复选框保持最新,google-apps-script,checkbox,google-sheets,Google Apps Script,Checkbox,Google Sheets,我需要一些关于这个代码的帮助。我有我的资料表“代理名单”。当第J列中的复选框为True时,第K列-最后一列中的数据将复制到从第一个空行和第K列开始的工作表“行程”。此公式有效,但我需要添加一些功能,无法找到答案。我需要: 我希望能够选中该框,将行复制到“行程”。然后在“行程表”上有一个带有数据的复选框。当我取消选中“行程”上的复选框时,我想清除数据,同时取消选中“代理列表”上相应的复选框 我还需要能够切换这两个复选框与我的鼠标。而且,如果单元格中包含公式,则无法切换。有办法解决这个问题吗 目前

我需要一些关于这个代码的帮助。我有我的资料表“代理名单”。当第J列中的复选框为True时,第K列-最后一列中的数据将复制到从第一个空行和第K列开始的工作表“行程”。此公式有效,但我需要添加一些功能,无法找到答案。我需要:

  • 我希望能够选中该框,将行复制到“行程”。然后在“行程表”上有一个带有数据的复选框。当我取消选中“行程”上的复选框时,我想清除数据,同时取消选中“代理列表”上相应的复选框

  • 我还需要能够切换这两个复选框与我的鼠标。而且,如果单元格中包含公式,则无法切换。有办法解决这个问题吗

  • 目前,我正在将数据复制到“行程”中的最后一行。但是,如果在该行的工作表上的任何其他位置存在公式或列,则会将该行视为非空。特别是,我不能在“行程”栏中设置复选框!J:J向下移动工作表,因为这样行就不是空的,数据就到了最底部。我尝试使用代码查看O列的最后一行,但随后整个公式停止工作: var target=targetSheet.getRange(targetSheet.getRange(O:O.getLastRow()+1,11)

  • 我考虑过使用VLOOKUP或Match或其他公式来扫描“行程表”中的一列以查找匹配项,如果没有匹配项,则复选框将变为FALSE。但同样,我不能切换复选框

是否有办法使两个复选框保持最新,并根据该复选框复制/清除“行程”上的数据? 谢谢

以下是一个指向样本表的链接:


好的@Sio我想我做了一个对你有用的修复

基本上,您的问题是跟踪行程中的哪一行对应于代理列表中的那一行

为了在没有实际存储在工作表中的情况下实现这种持久性,我发现了一个名为。在那里,我成对地存储了行,以便以后检索

代码 这是您已经拥有的,只需在第10列(J)添加
insertcheckbox
。还存储这对行,以便以后检索。看,我已经将其存储在文档级别

  • 取消选中代理列表中的行可删除行程中的行
  • 通过文档属性获取需要删除的行。然后在行程中使用
    deleteRow
    ,并使用
    deleteProperty
    清除我们属性中的记录

  • 取消选中行程表中的行可删除该行并取消选中代理列表中的行
    }否则如果(s.getName()=“行程”和&r.getColumn()==10和&r.getValue()==false){
    //取消选中复选框并取消选中“代理列表”时,从“行程”中删除该行
    var prop=PropertiesService.getDocumentProperties();
    s、 删除行(row);
    //查看“代理列表”中的相应行
    var keys=prop.getKeys();
    对于(变量i=0;i
    在这里,删除该行非常简单,因为您可以从事件对象检索该行。虽然在这种情况下,我们需要迭代属性中的每一对值,因为我们将密钥存储为代理列表的行

    参考文献

    好的@Sio我想我已经做了一个修复,可以对你有用

    基本上,您的问题是跟踪行程中的哪一行对应于代理列表中的那一行

    为了在没有实际存储在工作表中的情况下实现这种持久性,我发现了一个名为。在那里,我成对地存储了行,以便以后检索

    代码 这是您已经拥有的,只需在第10列(J)添加
    insertcheckbox
    。还存储这对行,以便以后检索。看,我已经将其存储在文档级别

  • 取消选中代理列表中的行可删除行程中的行
  • 通过文档属性获取需要删除的行。然后在行程中使用
    deleteRow
    ,并使用
    deleteProperty
    清除我们属性中的记录

  • 取消选中行程表中的行可删除该行并取消选中代理列表中的行
    }否则如果(s.getName()=“行程”和&r.getColumn()==10和&r.getValue()==false){
    //取消选中复选框并取消选中“代理列表”时,从“行程”中删除该行
    var prop=PropertiesService.getDocumentProperties();
    s、 删除行(row);
    //查看“代理列表”中的相应行
    var keys=prop.getKeys();
    对于(变量i=0;i
    在这里,删除该行非常简单,因为您可以从事件对象检索该行。虽然在这种情况下,我们需要迭代属性中的每一对值,因为我们将密钥存储为代理列表的行

    参考文献

    您是否可以共享一份工作表副本,以直观地了解您正在尝试做什么?是否要在单击复选框时同时删除这两行?也许可以在sam中添加描述
    function onEdit(event) {
        // assumes source data in sheet named "Agency List"
        // target sheet of move to named "Itinerary"
        // getColumn with check-boxes is currently set to colu 3 or C
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var s = event.source.getActiveSheet();
        var r = event.source.getActiveRange();
        if (s.getName() == "Agency List" && r.getColumn() == 3 && r.getValue() == true) {
            var row = r.getRow();
            var numColumns = s.getLastColumn();
            var targetSheet = ss.getSheetByName("Itinerary");
            var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 11);
            s.getRange(row, 4, 1, numColumns).copyTo(target, { contentsOnly: true });
        } else if (s.getName() == "Itinerary" && r.getColumn() == 9 && r.getValue() == false) {
            var row = r.getRow();
            var numColumns = s.getLastColumn();
            s.deleteRow(row);
        }
    }
    
    function onEdit(event) {
        // assumes source data in sheet named "Agency List"
        // target sheet of move to named "Itinerary"
        // getColumn with check-boxes is currently set to colu 3 or C
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var s = event.source.getActiveSheet();
        var r = event.source.getActiveRange();
        var row = r.getRow();
        var numColumns = s.getLastColumn();
        Logger.log(r.getValue());
    
        if (s.getName() == "Agency List" && r.getColumn() == 3 && r.getValue() == true) {
            // Create the record in "Itnerary"
            var prop = PropertiesService.getDocumentProperties();
            var targetSheet = ss.getSheetByName("Itinerary");
            var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 11);
            s.getRange(row, 4, 1, numColumns).copyTo(target, { contentsOnly: true });
            // Insert checkbox cell (already checked)
            targetSheet.getRange(target.getRow(), 10).insertCheckboxes().check();
            prop.setProperty(row, target.getRow());
        } else if (s.getName() == "Agency List" && r.getColumn() == 3 && r.getValue() == "") {
            // Remove the row from "Itinerary" when the checkbox in "Agency List" is unchecked 
            var prop = PropertiesService.getDocumentProperties();
            var targetRow = prop.getProperty(row);
            ss.getSheetByName("Itinerary").deleteRow(targetRow);
            Logger.log("Deleted the " + targetRow + "row from " + s.getName());
            prop.deleteProperty(row);
        } else if (s.getName() == "Itinerary" && r.getColumn() == 10 && r.getValue() == false) {
            // Remove the row from "Itinerary"when the checkbox is unchecked and unchecks in "Agency List"
            var prop = PropertiesService.getDocumentProperties();
            s.deleteRow(row);
    
            // Look the corresponding row in "Agency List"
            var keys = prop.getKeys();
            for (var i = 0; i < keys.length; i++) {
                var key = keys[i];
                if (prop.getProperty(key) == row) {
                    ss.getSheetByName("Agency List").getRange(key, 3).setValue(false);
                    prop.deleteProperty(key)
                    break;
                }
            }
        }
    }
    
    if (s.getName() == "Agency List" && r.getColumn() == 3 && r.getValue() == true) {
            // Create the record in "Itnerary"
            var prop = PropertiesService.getDocumentProperties();
            var targetSheet = ss.getSheetByName("Itinerary");
            var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 11);
            s.getRange(row, 4, 1, numColumns).copyTo(target, { contentsOnly: true });
            // Insert checkbox cell (already checked)
            targetSheet.getRange(target.getRow(), 10).insertCheckboxes().check();
            prop.setProperty(row, target.getRow());
    }
    
    } else if (s.getName() == "Agency List" && r.getColumn() == 3 && r.getValue() == "") {
            // Remove the row from "Itinerary" when the checkbox in "Agency List" is unchecked 
            var prop = PropertiesService.getDocumentProperties();
            var targetRow = prop.getProperty(row);
            ss.getSheetByName("Itinerary").deleteRow(targetRow);
            Logger.log("Deleted the " + targetRow + "row from " + s.getName());
            prop.deleteProperty(row);
    }
    
    } else if (s.getName() == "Itinerary" && r.getColumn() == 10 && r.getValue() == false) {
            // Remove the row from "Itinerary"when the checkbox is unchecked and unchecks in "Agency List"
            var prop = PropertiesService.getDocumentProperties();
            s.deleteRow(row);
    
            // Look the corresponding row in "Agency List"
            var keys = prop.getKeys();
            for (var i = 0; i < keys.length; i++) {
                var key = keys[i];
                if (prop.getProperty(key) == row) {
                    ss.getSheetByName("Agency List").getRange(key, 3).setValue(false);
                    prop.deleteProperty(key)
                    break;
                }
            }
        }