【问题标题】:Trigger not working in Apps script触发器在应用程序脚本中不起作用
【发布时间】:2014-11-11 03:52:29
【问题描述】:

我想每小时运行一次下面的代码,但它不能正常工作。我的意思是,当手动运行应用程序脚本时,这很好,但我已将这段代码的触发器设置为每小时一次的时间驱动。

但是这个应用程序脚本并不是每小时都更新我的电子表格。 请为此提供一些解决方案。

function gControlMonitoring()
{
    var sheet= SpreadsheetApp.getActiveSpreadsheet();
    // var ss=sheet.getActiveSheet();
    // var sheet= SpreadsheetApp.openById('19Fk3pxtfCqP_6Lj-bZvI7UO_ejqA-c1OQBNaBKLa2Tk');
    // SpreadsheetApp.setActiveSpreadsheet(sheet);
    var ss=sheet.getActiveSheet();
    //  var ss =SpreadsheetApp.getActiveSpreadsheet();
    var resp = UrlFetchApp.fetch("https://mail.google.com/a/advanceforensictools.com");
    Logger.log(resp);
    if(resp.getContentText().indexOf('ssomanagerservlet')>-1)
    {
        var d=new Date();
        var dateformat=Utilities.formatDate(d, "Asia/Kolkata", "MM/dd/yyyy");
        Logger.log("dateformat=" + dateformat); //Taking the Current date 
        // var cell = sheet.getRange(2,1); //updating the spreadsheet with current date 
        // cell.setValue(" " +dateformat);
        var timeFormat=Utilities.formatDate(d, "Asia/Kolkata", "HH");//Taking current Time
        Logger.log("dateTime=" + timeFormat);
        var data_column = ss.getRange(1,1,1,ss.getLastColumn()).getValues();//putting all the values of row one to data_column instance
        Logger.log("record" +data_column);

        if(timeFormat==0)   
        {
            var newrow=updatingspread();//Add New row if a new day has start
            var cell = sheet.getRange(2,1); //updating the spreadsheet with current date 
            cell.setValue(" " +dateformat);  
        }

        for(var i=0;i<25;i++)
        {
            var datacol=data_column[0];
            Logger.log(datacol[i]);
            if(datacol[i]==timeFormat)
            {
                ss.getRange(2, i+1).setBackground('green').setValue(1);
                // if(i==23)
                // {
                //     sheet.getRange(2, i+1).setBackground('green').setValue(1);
                //     var newrow=updatingspread();               
                // }
            }
        }      
    } 
    else 
    {
        for(var i=0;i<25;i++)
        {
            var datacol=data_column[0];
            Logger.log(datacol[i]);
            if(datacol[i]==timeFormat)
            {
                sheet.getRange(2, i+1).setBackground('red').setValue(0);
                if(i==23)
                {
                    ss.getRange(2, i+1).setBackground('red').setValue(0);
                    var newrow=updatingspread();
                }
                GmailApp.sendEmail('abc@gmail.com', 'hello', 'Hello Team');
                Logger.log(response.getResponseCode());
                Logger.log(response.getContentText());
            }
        }
    }
}


function updatingspread()
{
    var newSheet = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = newSheet.insertRowBefore(2);
    var data_column1 = sheet.getRange(2,1,1,sheet.getLastColumn()).getBackgrounds();
    Logger.log(data_column1);
    for(i=0;i<25;i++)
    {
        var dataval=data_column1[0];
        Logger.log(dataval[i]);
        if(dataval[i]!='white'&& dataval[i]!='#ffffff')
        {
            var newup=sheet.getRange(2,i+1).setBackgroundRGB(255,255,255);
        }
    }
    var range = sheet.getRange('A7');
    sheet.hideRow(range);
}

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    当您在计时器触发器上运行访问电子表格的函数时,您必须使用 openById("ss id long string") 而不是 getActiveSpreadsheet 和 getSheetByName(" sheet name") 而不是 getActiveSheet,因为其中没有活动的电子表格上下文。

    【讨论】:

    • 请提供我应该在此代码中做的确切更正。
    • 当我尝试这个时,我得到一个错误“”TypeError:无法调用 null 的方法“getRange”。 (第 20 行,文件“代码”)“”请给我一些建议,以便我可以解决此错误。
    • 您可能没有使用正确的工作表名称或电子表格 ID。检查电子表格的值。
    • 我使用了正确的工作表名称和电子表格 ID。并将时间触发器设为每 5 分钟一次。但它不是每五分钟运行一次。如果我手动运行脚本,它会更新电子表格,但它不能使用触发器。
    • 如果可能的话,请提供您的电子邮件地址,我将使用电子表格邮寄我的所有代码,您可以检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多