Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 谷歌表单关于车辆服务的有条件电子邮件警报到期_Google Apps Script_Google Sheets_Google Sheets Formula - Fatal编程技术网

Google apps script 谷歌表单关于车辆服务的有条件电子邮件警报到期

Google apps script 谷歌表单关于车辆服务的有条件电子邮件警报到期,google-apps-script,google-sheets,google-sheets-formula,Google Apps Script,Google Sheets,Google Sheets Formula,Noob警报。 我正在建立一个车辆维护记录表,因为我找不到一个不做太多事情就能做我想做的事情的程序 我无法让电子邮件部分给出任何结果。在“O”列的“Maint Sched.”表中,我预测了今天的小时数(我对所有车辆和设备都使用“小时”)。我希望在“O”列中的值接近“S”和“U”列中的值时发送电子邮件。最好在“设置”中有一个值点来确定((“小时”-“设置值”)=(列“S”或“U”) 在我当前的代码中,即使值匹配,电子邮件也不会发送(没有错误,只是没有收到电子邮件) 当“O”列的值等于或大于“S”或

Noob警报。 我正在建立一个车辆维护记录表,因为我找不到一个不做太多事情就能做我想做的事情的程序

我无法让电子邮件部分给出任何结果。在“O”列的“Maint Sched.”表中,我预测了今天的小时数(我对所有车辆和设备都使用“小时”)。我希望在“O”列中的值接近“S”和“U”列中的值时发送电子邮件。最好在“设置”中有一个值点来确定((“小时”-“设置值”)=(列“S”或“U”)

  • 在我当前的代码中,即使值匹配,电子邮件也不会发送(没有错误,只是没有收到电子邮件)
  • 当“O”列的值等于或大于“S”或“U”列时,应发送一次电子邮件
  • “相等前”通知的可调“设置”值
  • 以下是工作表链接:

    这是(复制和改编的)脚本:

    谢谢你的帮助

    编辑11/12:

    这是我的更新代码,它让我得到了我想要的结果。我现在的问题是,我需要将范围从1行增加到第4行,再增加到底部(A4:A等)

    正如您所见,我增加了代码的范围,但它只返回第4行的结果。我认为我需要循环代码?

    您的代码存在多个问题:
    • 您使用的是
      getValue()
      为了从范围中获取值,您应该指定范围,然后使用
      getValues()

    • 您试图在不使用循环的情况下对值数组执行操作

    • 您多次调用
      电子表格
      服务,这可能会导致脚本执行延迟

    考虑到这些因素,我建议您将代码更新为:

    一小条 函数sendmail(){ 让电子表格=SpreadsheetApp.getActiveSpreadsheet(); 让maintSched=spreadsheet.getSheetByName(“Maint Sched”); 设setSheet=spreadsheet.getSheetByName(“设置”); 让vehicleCMiles=maintSched.getRange(4,17,100,1).getValues(); 让vehicleDMiles=maintSched.getRange(4,19100,1).getValues(); 让equipValue=maintSched.getRange(4,1100,1).getValues(); 让vehicleV=setsSheet.getRange(2,2).getValue(); 让emailAddress=setsSheet.getRange(1,2).getValue(); 对于(设i=0;i=车辆里程[i][0]-VehicleLev){ //其他业务 } } 解释 如您所见,电子表格已存储到一个变量中,该变量稍后用于获取您正在使用的两张工作表

    由于您希望从
    VehicleMiles
    VehicleMiles
    的范围中获取值,因此使用了带有以下参数的
    getRange
    方法:

    • 第一个参数表示

    • 第二个参数表示

    • 第三个参数表示行数

    • 第四个参数表示列数

    另外,为了从上面声明的这个范围中获取值,已经使用了
    getValues()
    方法。这将返回一个2D数组,因此为了访问这些值,需要使用循环

    注 请记住,您可能必须相应地调整范围以适合您的数据。此外,构建
    for
    循环时考虑到
    车辆里程
    车辆里程
    包含相同数量的元素

    参考文献
    • )

    • )


    电子邮件地址是否包含有效的电子邮件地址?@guineachasery如果您的声明包含作业而非比较尝试==@ale13是的,该电子邮件是我的工作电子邮件,我做的第一件事是验证其正确性。我没有将该特定电子邮件包含在此处,是有原因的。@Cooper,您能澄清一下吗?对不起,我的英语不流利无论如何……vs谢谢!现在它向我发送了许多相同电子邮件中所有3列中的所有值……我在76封电子邮件中终止了执行。我添加到您的代码是var message='the'+equipValue+'在'+VehicleMiles+'英里/小时,并在'+VehicleMiles+'进行服务;var subject='service due'“;MailApp.sendmail(电子邮件地址、主题、消息);}”
      var vehicleCurrentMiles = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Maint Sched.").getRange("Q4"); 
      var vehicleCMiles = vehicleCurrentMiles.getValue();
      var vehicleDueMiles = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Maint Sched.").getRange("S4"); 
      var vehicleDMiles = vehicleDueMiles.getValue();
      var vehicle = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Maint Sched.").getRange("A4"); 
      if (vehicleCMiles = vehicleDMiles){
        var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Settings").getRange("B1");
        var emailAddress = emailRange.getValue();
        var message = 'The ' + vehicle + 'is due for service ';
        var subject = 'Service Due';
        MailApp.sendEmail(emailAddress, subject, message);
        }
    }
    
      var vehicleCurrentMiles = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Maint Sched.").getRange("Q4:Q"); 
      var vehicleCMiles = vehicleCurrentMiles.getValue();
      var vehicleDueMiles = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Maint Sched.").getRange("S4:S"); 
      var vehicleDMiles = vehicleDueMiles.getValue();
      var equipValue = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Maint Sched.").getRange("A4:A"); 
      var equipV = equipValue.getValue();  
      var vehiclevariable = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Settings").getRange("B2");   
      var vehicleV = vehiclevariable.getValue();  
      if (vehicleCMiles >= (vehicleDMiles - vehicleV)) {
        var emailRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Settings").getRange("B1");
        var emailAddress = emailRange.getValue();
        var message = 'The ' + equipV + ' is at ' + vehicleCMiles +' miles/hours and is due for service at ' + vehicleDMiles + '.';
        var subject = 'Service Due';
        MailApp.sendEmail(emailAddress, subject, message);
        }
    }
    
    function sendEmail() {
        let spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
        let maintSched = spreadsheet.getSheetByName("Maint Sched.");
        let settSheet = spreadsheet.getSheetByName("Settings");
        let vehicleCMiles = maintSched.getRange(4, 17, 100, 1).getValues();
        let vehicleDMiles = maintSched.getRange(4, 19, 100, 1).getValues();
        let equipValue = maintSched.getRange(4, 1, 100, 1).getValues();
        let vehicleV = settSheet.getRange(2, 2).getValue();
        let emailAddress = settSheet.getRange(1, 2).getValue();
    
        for (let i = 0; i < vehicleCMiles.length; i++)
            if (vehicleCMiles[i][0] >= vehicleDMiles[i][0] - vehicleV) {
                // other operations
            }
    }