【问题标题】:Deleting a row based on two conditions根据两个条件删除一行
【发布时间】:2019-09-21 16:48:14
【问题描述】:

所以我在工作表中有一行数据。如果列 H =“完成”并且列 A 的时间戳超过 48 小时,我需要删除该行。我的问题是添加经过时间条件。如果列 H =“完成”,则该脚本在删除行时有效。

var SS = SpreadsheetApp.openById("SheetID");
var SHEET = SS.getSheetByName("Form Responses");
var RANGE = SHEET.getDataRange();
var day = 24*3600*1000
var today = parseInt((new Date().setHours(0,0,0,0))/day);


var DELETE_VAL = "Complete";
var COL_TO_SEARCH = 7; // The column to search for the DELETE_VAL (Zero is first)
var COL_TO_SEARCH_2 = 0; // The column to search for the date (Zero is first)


function deleteEachRow(){

  var rangeVals = RANGE.getValues();

  //Reverse the 'for' loop.
  for(var i = rangeVals.length-1; i >= 0; i--){
    if(rangeVals[i][COL_TO_SEARCH] === DELETE_VAL && rangeVals[i][COL_TO_SEARCH_2] < today){

      SHEET.deleteRow(i+1); 
    };
  };
};

【问题讨论】:

    标签: google-apps-script google-sheets timestamp


    【解决方案1】:
    function deleteIfOlderThan2DaysAgo() {
      var ss=SpreadsheetApp.openById("SheetID");
      var sh=ss.getSheetByName("Form Responses");
      var rg=sh.getDataRange();
      var vA=rg.getValues();
      var dt=new Date();
      var twoDaysAgo=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()-2).valueOf();
      var d=0;
      for(var i=0;i<vA.length;i++){
        var col1=new Date(vA[i][0]).valueOf();
        if(vA[i][7]=="Complete" && col1<twoDaysAgo) {
          sh.deleteRow(i+1-d++); 
        }
      }
    }
    

    【讨论】:

    • 嘿!谢谢您的帮助。它似乎不起作用。可能是由于我使用的时间格式吗? (例如 2019 年 9 月 15 日 13:29:39)
    • 不,我有一个错误。现在复制它。它正在工作。这种格式应该没问题。
    • 为了我的启迪。不指定工作表和选项卡的更改是否意味着这将适用于整个工作表?例如,如果在同一张工作表上有另一个标签格式相似,我不希望它适用于它吗?
    • 哦,是的。我忘记改回来了。现在它在里面。
    • 回答您的问题。无论它是什么,它都适用于活动工作表。但是使用 openById() 意味着您将在服务器上运行它,因此活动页面将始终是最左边的页面。 (即 getSheets()[0])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 2018-03-03
    • 2017-01-16
    相关资源
    最近更新 更多