我有一个脚本,它检查某些条件,以便向我的客户发送提醒电子邮件或短信 . 我发现的唯一问题是,如果我尝试编写一个被过滤器隐藏的单元格,脚本会执行,但数据不会以任何方式更改 .
我会写一整个脚本的简短版本:
function test(){
var nowTime = new Date();
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var lastrow =sheet.getLastRow();
var lastcol =sheet.getLastColumn();
var fullData =cell.offset(0, 0,lastrow-
cell.getRow()+1,lastcol).getValues();
var cell = sheet.getRange("A2");
var i=0;
while (i<fullData.length){
var reminderType =0;
var row = fullData[i];
if (row[0] == 1) {sendreminder();cell.offset(i, 2).setValue(new Date());}
}
}
例如,如果第一列隐藏了脚本执行1的所有行并发送了所有提醒但忽略了setvalue(),如果行是可见的,则它可以完美地工作 .
一个解决方案可以删除过滤器,但会非常烦人,因为我们经常使用过滤器,脚本每10分钟触发一次,所以我会在工作表上工作,突然过滤器被删除以运行脚本 .
我尝试过cell.offset,getrange等等 . 没有任何成功......想法?
EDIT: 问题似乎只有在我尝试写日期 if (row[0] == 1) {cell.offset(i, 1).setValue(new Date());}
例如,我正在另一列中写入另一个信息(一个数字),并且该单元格会更新 .
其余的保持不变这是我创建的测试表:https://docs.google.com/spreadsheets/d/1-FNDGmvCc8nRFTG65Sj9L2RhGn8R3DtwR3llwBG5-FA/edit#gid=0
2 回答
现在我添加了这段代码来保存过滤器的状态并在最后重新 Build 它 . 它并不是很优雅,但仍然会增加很多混乱或剧本失败的机会,但这是我提出的侵入性较小的解决方案 . 有人有更好的吗?
鉴于问题不在于指出隐藏行中的问题,解决方案是在将值写入单元格之前使用formatdate格式化值 .
不理想,因为区域格式化可能会阻止脚本在不同的帐户上工作,但肯定比禁用过滤器更好的解决方案 .
这是我需要添加的代码:
任何关于如何改进此脚本或解决原始问题没有变通方法的想法,这是值得赞赏:)