繁体   English   中英

Google表格脚本可根据多个单元格中的日期删除行

[英]google sheets script to remove rows based on dates in multiple cells

我正在开发一个用于从电子表格中删除旧内容的应用程序。 我发现有几篇文章可以根据特定数据隐藏或删除工作表,但始终位于单个单元格中。 我需要一些检查每行三个单元格中的日期的东西。

该工作表由一个表格填充,该表格要求用户在我们的视频中输入他们希望公告运行的三个日期,并在我所教的HS上打印公告。 我只想删除旧数据,发现无数(可能是6或8个)脚本示例,它们执行了类似的操作,因此我抓住了一个示例并尝试扩展逻辑语句以检查C,D和E列(使用索引) , 当然)。

它可以工作,但是删除日期不是今天的行,而是删除所有三列中的日期。 我还需要让它对空的单元格进行计数,使其像旧的一样。

因此,我尝试了Cooper下面建议的脚本,这是一个很大的进步。 它仍然会跳过带有空值的行,在某些情况下,它会删除我不想删除的行。在所示的图像中,表单接受了教师的输入,这些教师提交公告内容的时间最多为三个日期。 我将工作表的格式设置为以红色显示旧日期,以绿色显示今天的日期,以黄色显示未来的日期。 我要删除具有所有红色或空白单元格的行。 但是,创可贴将迫使他们为所有三个选择日期,而不是不允许非参赛者。 但是最好让代码将空白单元格识别为合格的。 [![每日公告数据表] [1]] [1]

这是最终有效的方法。 我敢肯定有一些更流畅的方法可以做到这一点,但实际上我的编程能力有所提高,首先是通过日志来解决问题,然后在有证据证明我所做的工作可以继续进行下去。

 /* Here is the thinking: I need to have a script that is run from Add-ons that checks each cell of a range for dates. It can be done through conditional formatting bg colors, but that is redundant. The first thing is to create the functions that find and return row numbers that have all old dates. In the initial build these can be returned to the log (Logger.log()) inside of a for(loop). '*/ function readRows() { var sh=SpreadsheetApp.getActiveSheet(); var rg=sh.getDataRange(); var vA=rg.getValues(); var rowsDeleted=0; var today=new Date().valueOf(); //cycle through rows. In each row check column values for date. if date is old, add 1 to oldCount for(var i=vA.length-1;i>=0;i--) { var oldCount=0; if(new Date(vA[i][2]).valueOf()<today) { oldCount++; } if(new Date(vA[i][3]).valueOf()<today) { oldCount++; } if(new Date(vA[i][4]).valueOf()<today) { oldCount++; } if(oldCount>2) { sh.deleteRow(i+1); rowsDeleted++; } } Logger.log(rowsDeleted); } 

接下来,我想弄清楚如何制作将每日公告输出到Doc或pdf的内容。

尝试这个:

function readRows() {
  var sh=SpreadsheetApp.getActiveSheet();
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var rowsDeleted=0;
  var today=new Date().valueOf();
  for(var i=vA.length-1;i>=0;i--) {
    if ((new Date(vA[i][2]).valueOf()<today)||(new Date(vA[i][3]).valueOf()<today)||(new Date(vA[i][4]).valueOf()<today) ){
      sh.deleteRow(i+1);
      rowsDeleted++;
    }
  }
  Logger.log(rowsDeleted);
}

我不确定您想要什么,但这可能会有所帮助。 删除行时,应从底部开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM