首页 文章

无法将javascript日期对象设置为由过滤器隐藏的单元格

提问于
浏览
0

我有一个脚本,它检查某些条件,以便向我的客户发送提醒电子邮件或短信 . 我发现的唯一问题是,如果我尝试编写一个被过滤器隐藏的单元格,脚本会执行,但数据不会以任何方式更改 .

我会写一整个脚本的简短版本:

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 回答

  • 0

    现在我添加了这段代码来保存过滤器的状态并在最后重新 Build 它 . 它并不是很优雅,但仍然会增加很多混乱或剧本失败的机会,但这是我提出的侵入性较小的解决方案 . 有人有更好的吗?

    // at the beginning
    if (sheet1.getFilter()){
         var filterRange= sheet1.getFilter().getRange();
         var filterSetting = [];
    var i=0;
     while (i<filterRange.getNumColumns()-1) {filterSetting[i]= sheet1.getFilter().getColumnFilterCriteria(i+1);sheet1.getFilter().removeColumnFilterCriteria(i+1);i++; }
    }
    // At the end
     if (sheet1.getFilter()){
     var i=0;
     while (i<filterRange.getNumColumns()-1) {if (filterSetting[i]) sheet1.getFilter().setColumnFilterCriteria(i+1, filterSetting[i]);i++; }
    }
    
  • 0

    鉴于问题不在于指出隐藏行中的问题,解决方案是在将值写入单元格之前使用formatdate格式化值 .

    不理想,因为区域格式化可能会阻止脚本在不同的帐户上工作,但肯定比禁用过滤器更好的解决方案 .

    这是我需要添加的代码:

    var nowTime = new Date();  
    var timeZone = Session.getScriptTimeZone();
    var nowTimeFormatted = Utilities.formatDate(nowTime, timeZone, 'MM/dd/yyyy HH:mm:ss');
    

    任何关于如何改进此脚本或解决原始问题没有变通方法的想法,这是值得赞赏:)

相关问题