Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 选中复选框时复制值,并在编辑后禁用旧编辑的单元格_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 选中复选框时复制值,并在编辑后禁用旧编辑的单元格

Javascript 选中复选框时复制值,并在编辑后禁用旧编辑的单元格,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,当用户选中单元格A2中的复选框时,将行的单元格C2值复制到目标图纸单元格D7。如果用户选中框A3,则应将C3复制到目标图纸单元格D7,并将C3复制到A列中除标题外的每个单元格 如果我已经勾选了A2的复选框并复制了C2的详细信息,这意味着A2不应该再被点击。但所有其他如A3 A4等仍然能够覆盖D7值。但在A3被选中后,脚本不应该在A2中工作 以下是源代码表: 和目标页: 说明: 你有两个目标: 您希望能够将数据从源工作表的列A复制到单元格D7 基本上,您需要获取活动行和列C的值,并将其设置为单

当用户选中单元格A2中的复选框时,将行的单元格C2值复制到目标图纸单元格D7。如果用户选中框A3,则应将C3复制到目标图纸单元格D7,并将C3复制到A列中除标题外的每个单元格

如果我已经勾选了A2的复选框并复制了C2的详细信息,这意味着A2不应该再被点击。但所有其他如A3 A4等仍然能够覆盖D7值。但在A3被选中后,脚本不应该在A2中工作

以下是源代码表:

和目标页:

说明: 你有两个目标:

  • 您希望能够将数据从源工作表的列A复制到单元格D7
  • 基本上,您需要获取活动行和列C的值,并将其设置为单元格D7

    targetSheet.getRange('D7').setValue(as.getRange(arow,3).getValue());
    
  • 您希望阻止以前使用过的单元格,因此如果使用旧单元格,则
    onEdit
    触发器希望将数据复制到单元格D7。对于这个特定场景,您需要利用这个类。您将存储过去编辑过的单元格,因此,如果新编辑的单元格是此列表的一部分,请不要复制数据,否则请将其复制到单元格D7
  • 解决方案: 我将解决方案复制到您的文件中,并对其进行了测试,结果与预期相符。你不需要做任何事。代码将在编辑后执行

    function onEdit(e) {
      const ss = e.source;
      const as = ss.getActiveSheet();
      const ar = e.range;
      const arow = ar.getRow();
      const acol = ar.getColumn();
      
      if (ar.getValue() == true && as.getName() == "get" && acol == 1 && arow > 1){
        console.log("mpika")
        const ncell = ar.getA1Notation();
        const check = getHistory(ncell);
        console.log(check)
    
        if(check) {
          const targetSheet = ss.getSheetByName("target");
          targetSheet.getRange('D7').setValue(as.getRange(arow,3).getValue());
        }
      }
    }
    
    function getHistory(ncell) {
      const cprop = PropertiesService.getDocumentProperties().getProperty("edited_cells")
      if(cprop){
        if(cprop.includes(ncell)){
          return false;
        }
        else{
          PropertiesService.getDocumentProperties().setProperty("edited_cells",`${cprop},${ncell}`)
          return true;
        }
      }
      else{
        PropertiesService.getDocumentProperties().setProperty("edited_cells",ncell);
        return true;
      }
    }
    

    A5,甚至是A6等新条目。实际上,整个列A接受A1,这是一个标题,但现在的问题是,如果我点击,比如说A4,它将C4复制到目标,A5也一样,但是如果再次转到A4,取消选中,再次选中,它将再次复制C4值。这里需要的是在A4启动后禁用它checked@AliAhmed因此,在
    D7
    获得一个值之后,您基本上想要禁用脚本,对吗?对复选框进行任何编辑都会使D7中的值保持相同的正确性?不,不是这样。我想要的是。如果我已经勾选了A2的复选框并复制了C2的详细信息,这意味着A2不应该再被点击。但所有其他如A3 A4等仍然能够覆盖D7值。但在A3被删除后,脚本不应该在A2中工作checked@AliAhmed您不应该手动运行
    onEdit
    功能。它是一个触发函数,在用户编辑时自动执行。想想看。如果必须手动执行触发器函数,那么它的用途是什么。触发器函数的唯一目的是由用户或时间事件执行,因此您不必自己运行它。请阅读官方文档中的触发器:.@AliAhmed,如果您有更多问题,请避免在评论部分提问。stackoverflow不允许后续问题。想想看,我们在这里为未来的读者创建一个在线存储库。未来的读者不会从评论部分获益。没有人读这里的评论。如果你不能将问题作为一个单独的帖子与你的问题联系起来,就发布一个新问题。