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
Google apps script 从谷歌工作表到日历的时区差异_Google Apps Script_Google Sheets_Google Api_Google Calendar Api_Google Api Js Client - Fatal编程技术网

Google apps script 从谷歌工作表到日历的时区差异

Google apps script 从谷歌工作表到日历的时区差异,google-apps-script,google-sheets,google-api,google-calendar-api,google-api-js-client,Google Apps Script,Google Sheets,Google Api,Google Calendar Api,Google Api Js Client,我有一段代码,从电子表格单元格中读取任务名称和日期,并在该日期用任务名称安排一个全天日历事件 /** @OnlyCurrentDoc */ function AddToCalendar1(){ var sheet = SpreadsheetApp.getActiveSheet(); var startRow = 2; // First row of data to process - 2 exempts my header row var numRows = sheet.

我有一段代码,从电子表格单元格中读取任务名称和日期,并在该日期用任务名称安排一个全天日历事件

/** @OnlyCurrentDoc */

function AddToCalendar1(){

  var sheet = SpreadsheetApp.getActiveSheet();  

  var startRow = 2;  // First row of data to process - 2 exempts my header row
  var numRows = sheet.getLastRow();   // Number of rows to process
  var numColumns = sheet.getLastColumn();

  var dataRange = sheet.getRange(startRow, 1, numRows-1, numColumns); 
  var data = dataRange.getValues();

  var complete = "Yes";

  for (var i = 0; i < data.length; ++i) {
    var row = data[i];
    var eventDate = row[0]; //date to schedule
    var task = row[1];  //job description 
    var status = row[2] // Scheduled?

    if (status != complete) {
      var currentCell = sheet.getRange(startRow + i, 3);

      var c =CalendarApp.getDefaultCalendar();     

      var event = c.createAllDayEvent(task, new Date(eventDate));

      Logger.log('Event ID: ' + event.getId());

      currentCell.setValue(complete);
    }

  }

}
Edit2

这是运行测试功能的结果

[19-09-10 13:44:06:319 ART] Sheet time zone: America/Los_Angeles
[19-09-10 13:44:06:320 ART] Script time zone: America/New_York
[19-09-10 13:44:06:414 ART] Date from sheet: Thu Oct 10 2019 03:00:00 GMT-0400 (EDT)
另外,我不确定现在有什么变化我在这行有一个错误

var event = CalendarApp.getDefaultCalendar().createAllDayEvent(task, new Date(eventDate.getTime()+3600000*10));

我建议仔细检查工作表和脚本的时区设置

我看到了你描述的当两者之间时区不匹配时的行为

我在单元格A1中设置了一个值为
2019-09-09
的表。然后,我使用以下函数设置容器绑定脚本:

function testTimeZones() {
  Logger.log('Sheet time zone: ' + SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone());
  Logger.log('Script time zone: ' + Session.getScriptTimeZone());
  Logger.log('Date from sheet: ' + SpreadsheetApp.getActiveSheet().getRange(1, 1).getValue());
}
[19-09-09 22:28:26:039 PDT] Sheet time zone: America/Buenos_Aires
[19-09-09 22:28:26:041 PDT] Script time zone: America/Argentina/Buenos_Aires
[19-09-09 22:28:26:127 PDT] Date from sheet: Mon Sep 09 2019 00:00:00 GMT-0300 (ART)
当工作表和脚本的时区都设置为
(GMT-03:00)布宜诺斯艾利斯
,这是执行该功能后的日志输出:

function testTimeZones() {
  Logger.log('Sheet time zone: ' + SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone());
  Logger.log('Script time zone: ' + Session.getScriptTimeZone());
  Logger.log('Date from sheet: ' + SpreadsheetApp.getActiveSheet().getRange(1, 1).getValue());
}
[19-09-09 22:28:26:039 PDT] Sheet time zone: America/Buenos_Aires
[19-09-09 22:28:26:041 PDT] Script time zone: America/Argentina/Buenos_Aires
[19-09-09 22:28:26:127 PDT] Date from sheet: Mon Sep 09 2019 00:00:00 GMT-0300 (ART)
但是,当我将脚本时区切换到东部时间
(GMT-05:00)时,这是日志输出:

[19-09-09 22:37:34:116 PDT] Sheet time zone: America/Buenos_Aires
[19-09-09 22:37:34:118 PDT] Script time zone: America/New_York
[19-09-09 22:37:34:207 PDT] Date from sheet: Sun Sep 08 2019 23:00:00 GMT-0400 (EDT)
与你看到的行为相符

尝试两件事:

  • 通过在脚本编辑器中检查
    文件
    ->
    项目属性
    ,验证脚本时区
  • 如果1不起作用,作为一个健全性检查,请尝试在项目中执行上面的测试函数。将其更改为指向具有日期值的单元格,或通过在单元格A1中创建具有日期的临时工作表来按原样使用它。考虑用结果更新问题,以提供更多的上下文。

  • 谢谢,关于“通过在脚本编辑器中检查文件->项目属性来验证脚本时区”的一条评论。它是一个只读属性,设置为GMT-5。这有助于非常具体,因为并非所有时区的行为都相同。例如,
    (GMT-05:00)东部时间因日期对象输出中的
    (EDT)
    (东部夏时制)而根据一年中的时间而变化。关于脚本时区属性,您是脚本所有者吗?在我创建的示例脚本中,我可以更改属性。
    Zona horaria(GMT-05:00)Hora del Este
    ,并查看最后一次编辑,其中包含测试函数的结果,其中涉及
    找不到函数…
    错误。。。如果您创建了一个新的工作表来运行测试功能,那么您就有了一个新的“活动”工作表,该工作表在代码所期望的位置不包含数据。因此,不会检索单元格值,不会实例化日期对象,等等。在您的问题中,您指出,“日历和电子表格具有相同的时区配置,即GMT-3”。不幸的是,这不是事实,这是您遇到的问题的根本原因。