Google apps script 检查今天是否在单元格中';s日期,然后继续

Google apps script 检查今天是否在单元格中';s日期,然后继续,google-apps-script,Google Apps Script,我在互联网上找到了一个脚本,正在尝试对它进行一些修改,以满足我的需要。但是偶然发现了一个问题。脚本从下拉菜单中获取书签列表,如果在下一个单元格中写入OK,则会将该行传输到选定书签。我想确认今天的日期 这张纸的复印件。这里也有些不同 var=7; var-nameCol=6 试着这样做: function onEdit(e) { var ss = e.source; var s = e.range.getSheet(); var r = e.range; var actionCo

我在互联网上找到了一个脚本,正在尝试对它进行一些修改,以满足我的需要。但是偶然发现了一个问题。脚本从下拉菜单中获取书签列表,如果在下一个单元格中写入OK,则会将该行传输到选定书签。我想确认今天的日期

这张纸的复印件。这里也有些不同

var=7; var-nameCol=6

试着这样做:

function onEdit(e) {
  var ss = e.source;
  var s = e.range.getSheet();
  var r = e.range;
  var actionCol = 10;
  var nameCol = 9;
  var rowIndex = r.rowStart;
  var colIndex = r.columnStart;
  var colNumber = s.getLastColumn()-1;
  const dt=new Date(e.range.offset(0,n));//you add the column offset 
  const dtv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
  const td=new Date();
  const tdv=new Date(td.getFullYear(),td.getMonth(),td.getDate()).valueOf();
  if (e.value == "ok" && colIndex == actionCol && dtv==tdv) {
    var targetSheet = s.getRange(rowIndex, nameCol).getValue();
    var tSh = ss.getSheetByName(targetSheet);
    if (tSh) { 
      var targetRange = tSh.getRange(tSh.getLastRow()+1, 1, 1, colNumber);
      var sourceRange = s.getRange(rowIndex, 1, 1, colNumber);
      sourceRange.copyTo(targetRange);
      s.deleteRow(rowIndex);
    }
  }
}

如果我理解正确,您希望在以下情况下剪切并粘贴已编辑的行:

  • 编辑的列是
    G
    ,其值是与今天相对应的日期
  • F
    中的对应名称指的是现有图纸的名称
  • 为了检查这两个日期是否对应于同一天,您可以比较由和返回的值,如此函数中所示(贷记到):

    然后,您可以在主函数中调用此函数:

    function onEdit(e) {
      var ss = e.source;
      var s = e.range.getSheet();
      var r = e.range;
      var value = r.getValue();
      var actionCol = 7;
      var nameCol = 6;
      var rowIndex = r.getRow();
      var colIndex = r.getColumn();
      var colNumber = s.getLastColumn();
      if (value instanceof Date && colIndex == actionCol) {
        var today = new Date();
        if (sameDay(value, today)) {
          var targetSheetName = s.getRange(rowIndex, nameCol).getValue();
          var targetSheet = ss.getSheetByName(targetSheetName);
          if (targetSheet) {
            var sourceRange = s.getRange(rowIndex, 1, 1, colNumber);
            var targetRange = targetSheet.getRange(targetSheet.getLastRow()+1, 1);
            sourceRange.copyTo(targetRange);
            s.deleteRow(rowIndex);
          } 
        }
      }
    }
    

    但是偶然发现了一个问题。
    你能说得更具体些吗?你有什么错误吗?实际结果与您预期的结果有何不同?您能否提供一份您正在处理的电子表格的副本,表明这一差异?现在,该功能的工作方式是,如果在“F”列中选择了选项卡,并且“G”列更改为“ok”,则该行将被传输。我想更改,以便在“G”列中的“ok”位置显示日期,如果是今天的日期,则进行复制。从逻辑上讲,我理解一切,但在这里,我必须自己写一些疯狂的问题。未给出:D非常提前感谢。@UnrealHA脚本已经在检查它是否是今天的日期,即使
    ok
    没有更改为日期。您的意思是希望将
    C
    中的日期复制到
    G
    ,然后将日期与今天的日期进行比较,如果匹配,则将行移动到目标工作表?而不是“确定”写入日期,然后检查今天的日期是否正确,然后复制。@UnrealHA因此,如果今天的日期写入
    G
    ,则要复制数据,忽略
    C
    。为了做到这一点,我编辑了我的答案,包括代码片段。让我知道这是否对你有效。我知道我的问题在哪里。非常感谢你。一切都很好。
    function sameDay(d1, d2) {
      return d1.getFullYear() === d2.getFullYear() &&
             d1.getMonth() === d2.getMonth() &&
             d1.getDate() === d2.getDate();
    }
    
    function onEdit(e) {
      var ss = e.source;
      var s = e.range.getSheet();
      var r = e.range;
      var value = r.getValue();
      var actionCol = 7;
      var nameCol = 6;
      var rowIndex = r.getRow();
      var colIndex = r.getColumn();
      var colNumber = s.getLastColumn();
      if (value instanceof Date && colIndex == actionCol) {
        var today = new Date();
        if (sameDay(value, today)) {
          var targetSheetName = s.getRange(rowIndex, nameCol).getValue();
          var targetSheet = ss.getSheetByName(targetSheetName);
          if (targetSheet) {
            var sourceRange = s.getRange(rowIndex, 1, 1, colNumber);
            var targetRange = targetSheet.getRange(targetSheet.getLastRow()+1, 1);
            sourceRange.copyTo(targetRange);
            s.deleteRow(rowIndex);
          } 
        }
      }
    }