Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/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 我的应用程序今天继续显示';s日期而不是我要的牢房里的东西_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 我的应用程序今天继续显示';s日期而不是我要的牢房里的东西

Google apps script 我的应用程序今天继续显示';s日期而不是我要的牢房里的东西,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我得到列date的第一个日期的输出,其中“exp”应该是。第3列是所有到期日期,但当我调用并输出它时,它显示为一个长格式的日期和时间。我对编码知之甚少。请帮忙 这是输出应该是什么样子,除了日期应该是从开始的日期,而不是从工作表的顶部日期 MJC-AP-200手表型号:AP 200将于2017年9月30日10天后到期 function checkReminder() { // get the spreadsheet object var spreadsheet = SpreadsheetApp

我得到列date的第一个日期的输出,其中“exp”应该是。第3列是所有到期日期,但当我调用并输出它时,它显示为一个长格式的日期和时间。我对编码知之甚少。请帮忙

这是输出应该是什么样子,除了日期应该是从开始的日期,而不是从工作表的顶部日期

MJC-AP-200手表型号:AP 200将于2017年9月30日10天后到期

  function checkReminder() {
// get the spreadsheet object
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// set the first sheet as active
SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
// fetch this sheet
var sheet = spreadsheet.getActiveSheet();

// figure out what the last row is
var lastRow = sheet.getLastRow();

// the rows are indexed starting at 1, and the first row
// is the headers, so start with row 2
var startRow = 2;

// grab column 8 (the 'days left' column) 
var range = sheet.getRange(2,8,lastRow-startRow+1,1 );
var numRows = range.getNumRows();
var days_left_values = range.getValues();

// Now, grab the name column
range = sheet.getRange(2, 1, lastRow-startRow+1, 1);
var reminder_info_values = range.getValues();

// Now, grab the exp date column
range = sheet.getRange(2, 3, lastRow-startRow+1, 1);
var exp = range.getValue();
var numRows = range.getNumRows();
var exp = Utilities.formatDate(exp, "GMT+1", "MM/dd/yy")

// Now, grab the model column
range = sheet.getRange(2, 4, lastRow-startRow+1, 1);
var model = range.getValues();

var warning_count = 0;
var msg = "";

// Loop over the days left values
for (var i = 0; i <= numRows - 1; i++) {
var days_left = days_left_values[i][0];
if(days_left <= 60) {
  // if it's less than 60 days until due date.
  var reminder_name = reminder_info_values[i][0];

  msg = msg + ""+reminder_name+" Watchguard model : " +model[i][0]+"is due 
  in "+days_left+" days "+Utilities.formatDate(exp[i]
  [0],"GMT+1","MM/dd/yy")+".\n \n";
  warning_count++;
  }
  }

  if(warning_count) {
   MailApp.sendEmail("James@mccnet.com", 
    "Watchguard Expiration List", msg);
   }


   };
DMA-AP-300-2 Watchguard型号:AP 300将于2017年9月30日0天后到期

  function checkReminder() {
// get the spreadsheet object
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// set the first sheet as active
SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
// fetch this sheet
var sheet = spreadsheet.getActiveSheet();

// figure out what the last row is
var lastRow = sheet.getLastRow();

// the rows are indexed starting at 1, and the first row
// is the headers, so start with row 2
var startRow = 2;

// grab column 8 (the 'days left' column) 
var range = sheet.getRange(2,8,lastRow-startRow+1,1 );
var numRows = range.getNumRows();
var days_left_values = range.getValues();

// Now, grab the name column
range = sheet.getRange(2, 1, lastRow-startRow+1, 1);
var reminder_info_values = range.getValues();

// Now, grab the exp date column
range = sheet.getRange(2, 3, lastRow-startRow+1, 1);
var exp = range.getValue();
var numRows = range.getNumRows();
var exp = Utilities.formatDate(exp, "GMT+1", "MM/dd/yy")

// Now, grab the model column
range = sheet.getRange(2, 4, lastRow-startRow+1, 1);
var model = range.getValues();

var warning_count = 0;
var msg = "";

// Loop over the days left values
for (var i = 0; i <= numRows - 1; i++) {
var days_left = days_left_values[i][0];
if(days_left <= 60) {
  // if it's less than 60 days until due date.
  var reminder_name = reminder_info_values[i][0];

  msg = msg + ""+reminder_name+" Watchguard model : " +model[i][0]+"is due 
  in "+days_left+" days "+Utilities.formatDate(exp[i]
  [0],"GMT+1","MM/dd/yy")+".\n \n";
  warning_count++;
  }
  }

  if(warning_count) {
   MailApp.sendEmail("James@mccnet.com", 
    "Watchguard Expiration List", msg);
   }


   };
Elwood Properties Watchguard型号:WGD-WG026583将于2017年9月30日前到期

  function checkReminder() {
// get the spreadsheet object
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// set the first sheet as active
SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
// fetch this sheet
var sheet = spreadsheet.getActiveSheet();

// figure out what the last row is
var lastRow = sheet.getLastRow();

// the rows are indexed starting at 1, and the first row
// is the headers, so start with row 2
var startRow = 2;

// grab column 8 (the 'days left' column) 
var range = sheet.getRange(2,8,lastRow-startRow+1,1 );
var numRows = range.getNumRows();
var days_left_values = range.getValues();

// Now, grab the name column
range = sheet.getRange(2, 1, lastRow-startRow+1, 1);
var reminder_info_values = range.getValues();

// Now, grab the exp date column
range = sheet.getRange(2, 3, lastRow-startRow+1, 1);
var exp = range.getValue();
var numRows = range.getNumRows();
var exp = Utilities.formatDate(exp, "GMT+1", "MM/dd/yy")

// Now, grab the model column
range = sheet.getRange(2, 4, lastRow-startRow+1, 1);
var model = range.getValues();

var warning_count = 0;
var msg = "";

// Loop over the days left values
for (var i = 0; i <= numRows - 1; i++) {
var days_left = days_left_values[i][0];
if(days_left <= 60) {
  // if it's less than 60 days until due date.
  var reminder_name = reminder_info_values[i][0];

  msg = msg + ""+reminder_name+" Watchguard model : " +model[i][0]+"is due 
  in "+days_left+" days "+Utilities.formatDate(exp[i]
  [0],"GMT+1","MM/dd/yy")+".\n \n";
  warning_count++;
  }
  }

  if(warning_count) {
   MailApp.sendEmail("James@mccnet.com", 
    "Watchguard Expiration List", msg);
   }


   };
埃尔伍德道具-XTM-26W手表护卫型号:XTM 26 Wis于2017年9月30日0天后到期

  function checkReminder() {
// get the spreadsheet object
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// set the first sheet as active
SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
// fetch this sheet
var sheet = spreadsheet.getActiveSheet();

// figure out what the last row is
var lastRow = sheet.getLastRow();

// the rows are indexed starting at 1, and the first row
// is the headers, so start with row 2
var startRow = 2;

// grab column 8 (the 'days left' column) 
var range = sheet.getRange(2,8,lastRow-startRow+1,1 );
var numRows = range.getNumRows();
var days_left_values = range.getValues();

// Now, grab the name column
range = sheet.getRange(2, 1, lastRow-startRow+1, 1);
var reminder_info_values = range.getValues();

// Now, grab the exp date column
range = sheet.getRange(2, 3, lastRow-startRow+1, 1);
var exp = range.getValue();
var numRows = range.getNumRows();
var exp = Utilities.formatDate(exp, "GMT+1", "MM/dd/yy")

// Now, grab the model column
range = sheet.getRange(2, 4, lastRow-startRow+1, 1);
var model = range.getValues();

var warning_count = 0;
var msg = "";

// Loop over the days left values
for (var i = 0; i <= numRows - 1; i++) {
var days_left = days_left_values[i][0];
if(days_left <= 60) {
  // if it's less than 60 days until due date.
  var reminder_name = reminder_info_values[i][0];

  msg = msg + ""+reminder_name+" Watchguard model : " +model[i][0]+"is due 
  in "+days_left+" days "+Utilities.formatDate(exp[i]
  [0],"GMT+1","MM/dd/yy")+".\n \n";
  warning_count++;
  }
  }

  if(warning_count) {
   MailApp.sendEmail("James@mccnet.com", 
    "Watchguard Expiration List", msg);
   }


   };
功能检查提醒(){
//获取电子表格对象
var电子表格=SpreadsheetApp.getActiveSpreadsheet();
//将第一张图纸设置为活动
电子表格app.setActiveSheet(电子表格.getSheets()[0]);
//把这张纸拿来
var sheet=spreadsheet.getActiveSheet();
//找出最后一行是什么
var lastRow=sheet.getLastRow();
//这些行从1开始索引,第一行开始索引
//是标题,所以从第2行开始
var startRow=2;
//抓取第8列(“剩余天数”列)
var范围=sheet.getRange(2,8,最后一行startRow+1,1);
var numRows=range.getNumRows();
var days_left_values=range.getValues();
//现在,抓取name列
范围=sheet.getRange(2,1,最后一行startRow+1,1);
var提醒_info_values=range.getValues();
//现在,抓取exp date列
范围=sheet.getRange(2,3,最后一行startRow+1,1);
var exp=range.getValue();
var numRows=range.getNumRows();
var exp=实用程序.formatDate(exp,“GMT+1”,“MM/dd/yy”)
//现在,抓住模型柱
范围=sheet.getRange(2,4,最后一行startRow+1,1);
var model=range.getValues();
var警告计数=0;
var msg=“”;
//循环剩余天数值

对于(var i=0;i,通过快速查看,您似乎给出了formatDate方法
new Date()
,作为实际返回今天日期的第一个参数。我认为您希望这样做

var exp = Utilities.formatDate(exp,"GMT+1","MM/dd/yy") 
这实际上为formatDate提供了从电子表格中获取的日期,并将格式化正确的日期

请尝试以下代码:

function checkReminder() {
// get the spreadsheet object
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// set the first sheet as active
SpreadsheetApp.setActiveSheet(spreadsheet.getSheets()[0]);
// fetch this sheet
var sheet = spreadsheet.getActiveSheet();

// figure out what the last row is
var lastRow = sheet.getLastRow();

// the rows are indexed starting at 1, and the first row
// is the headers, so start with row 2
var startRow = 2;

// grab column 8 (the 'days left' column) 
var range = sheet.getRange(2,8,lastRow-startRow+1,1 );
var numRows = range.getNumRows();
var days_left_values = range.getValues();

// Now, grab the name column
range = sheet.getRange(2, 1, lastRow-startRow+1, 1);
var reminder_info_values = range.getValues();

// Now, grab the exp date column
range = sheet.getRange(2, 3, lastRow-startRow+1, 1);
var exp = range.getValues();
var numRows = range.getNumRows();

// Now, grab the model column
range = sheet.getRange(2, 4, lastRow-startRow+1, 1);
var model = range.getValues();

var warning_count = 0;
var msg = "";

// Loop over the days left values
for (var i = 0; i <= numRows - 1; i++) {
var days_left = days_left_values[i][0];
if(days_left <= 60) {
  // if it's less than 60 days until due date.
  var reminder_name = reminder_info_values[i][0];

  msg = msg + ""+reminder_name+" Watchguard model : " +model[i][0]+"is due 
  in "+days_left+" days "+Utilities.formatDate(exp[i]
  [0],"GMT+1","MM/dd/yy")+".\n \n";
  warning_count++;
  }
  }

  if(warning_count) {
   MailApp.sendEmail("James@mccnet.com", 
    "Watchguard Expiration List", msg);
  }
};
功能检查提醒(){
//获取电子表格对象
var电子表格=SpreadsheetApp.getActiveSpreadsheet();
//将第一张图纸设置为活动
电子表格app.setActiveSheet(电子表格.getSheets()[0]);
//把这张纸拿来
var sheet=spreadsheet.getActiveSheet();
//找出最后一行是什么
var lastRow=sheet.getLastRow();
//这些行从1开始索引,第一行开始索引
//是标题,所以从第2行开始
var startRow=2;
//抓取第8列(“剩余天数”列)
var范围=sheet.getRange(2,8,最后一行startRow+1,1);
var numRows=range.getNumRows();
var days_left_values=range.getValues();
//现在,抓取name列
范围=sheet.getRange(2,1,最后一行startRow+1,1);
var提醒_info_values=range.getValues();
//现在,抓取exp date列
范围=sheet.getRange(2,3,最后一行startRow+1,1);
var exp=range.getValues();
var numRows=range.getNumRows();
//现在,抓住模型柱
范围=sheet.getRange(2,4,最后一行startRow+1,1);
var model=range.getValues();
var警告计数=0;
var msg=“”;
//循环剩余天数值

对于(var i=0;我感谢您,它适用于第一个日期,但它会一直重复列表中的第一个日期。我知道这一部分很简单,但我不了解语法。好的,所以您调用getValue来设置exp变量。这只返回范围的左上角单元格。您应该使用getValues()方法来设置exp的值。这将返回二维数组中范围的值。然后,您可以通过调用exp[2][0](索引从0开始)访问第三行的日期。现在,当谈到格式化部分时,您可以在给exp一个getValues值之后,在循环中逐个格式化exp中的所有值。这可以通过创建另一个变量来完成,在该变量中,您可以将格式化日期保存在一维数组中。让我们暂时将此数组称为EXPFORMATED。然后,在最后,不要输出exp输出expFormatted[i]。另一个选项是在最后输出,而不是输出exp输出实用程序。formattate(exp[i][0],“GMT+1”,“MM/dd/yy”)。我想我会使用第二种方法,因为从那时起,我不必对日期进行额外的循环并将它们保存在其他数组中。希望这会有所帮助,如果有不清楚的地方,请随时询问。我尝试将实用程序.formatDate(exp[I][0],“GMT+1”,“MM/dd/yy”)替换为“+exp+”,并且我得到了一个缺少的;before语句