【发布时间】:2018-02-03 00:26:19
【问题描述】:
我正在开发一款从电子表格中删除旧内容的应用。我发现有几个帖子根据特定数据隐藏或删除工作表,但它总是在一个单元格中。我需要检查每行三个单元格中的日期。
该表格由一个表单填充,该表单要求用户输入他们希望公告在我们的视频中运行的三个日期,并在我任教的 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 的东西。
【问题讨论】:
标签: google-apps-script google-sheets google-sheets-api