0

这是我从一开始的问题......我真的需要别人的帮助......

我需要为我的企业创建一个活动预订系统。我创建了一个 Google 表单来将预订输入到电子表格中,然后我需要一些代码来自动将这些数据传输到我帐户中的相关 Google 日历中。我找到了创建此代码的人,与他们共享了 google 表单/电子表格,以便他们可以创建代码。

以下是他们创建的代码:

我可以在表单中输入信息,进行提交,它们都出现在正确的日期,您可以通过代码看到它将根据开始创建一个全天事件(如果我在其中一个列中输入了全天)时间(开始时间)。

我的问题是,当我提交正确的条目时,突然间我的正确条目开始出现在我日历的前一天。这恰好发生在我晚上 11 点之后提交的任何条目上。我不确定问题是什么,但我相信这可能与时区有关。我在英国,它是 GMT+0000,为我制作剧本的人在印度。我已经读过,当您更改脚本的时区时,触发器不会自动更改(它们保持原始时区)。

如果我在一定时间后提交它们,这是否会导致我的条目突然出现在我的日历中,即使电子表格中的所有内容都是正确的???

我可以通过编辑代码以根据结束时间(enddt)而不是 startdt 创建全天事件来临时解决此问题,但这仅适用于一小段时间。直到上午 11 点,我可能必须将代码改回来?这一切都非常令人困惑。

如果是时区问题,有人可以告诉我如何找出触发器的时区,如果它们错了,我该如何在脚本中编辑触发器的时区。我真的被困住了,因为我需要这个来为我的业务进行预订,而不会因为让他们出现在错误的日期而感到困惑。

我所有的日历、电子表格、表格和脚本都是 GMT+0000

我将在下面复制并粘贴我的脚本,并加强我可以编辑的全天活动部分,以暂时对问题进行排序,直到它再次变回是否有帮助?

var ss = SpreadsheetApp.getActive();
/*function onEdit(e) {
   var doc = SpreadsheetApp.getActiveSheet();
setRowColors();
Browser.msgBox("Trigger it");
}*/

function onEdit(event){
  var doc = SpreadsheetApp.getActiveSheet();
  var r = event.source.getActiveRange();
  var currentCol = r.getColumn();
 // Browser.msgBox("currentCol:- "+currentCol);
  if(currentCol!= 10 && currentCol!= 11 && currentCol!= 12)
  {
  var currentRow = r.getRow();
 // Browser.msgBox("currentRow:- "+currentRow);
  var v = parseInt(currentRow);
   var dataRange = doc.getRange(v, 10, 1,3);
  var data = dataRange.getValues();
   for (i in data) {
    var row = data[i];
    var tom = row[0].toLowerCase();  

   // Browser.msgBox(tom);
    var steven = row[1].toLowerCase();
    var lucy = row[2].toLowerCase();
    if(tom=="added" )
     doc.getRange(v, 10, 1, 1).setValue("ADD"); 
     if(steven=="added" )
     doc.getRange(v, 11, 1, 1).setValue("ADD"); 
      if(lucy=="added" )
     doc.getRange(v, 12, 1, 1).setValue("ADD"); 

   }

}
    // calscript();
   //Browser.msgBox("Done:-");
}


function calscript() {
  //Browser.msgBox("start calscript:-");
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2;  // First row of data to process
  var numRows = 2;   // Number of rows to process
  var dataRange = sheet.getRange(startRow, 1, sheet.getMaxRows(),35);
  var data = dataRange.getValues();

  for (i in data) {
    var row = data[i];
    var title = row[32].toString();
    // Browser.msgBox(title);// First column
    var desc = row[34];       // Second column
    var tstart = row[2];
   // Browser.msgBox(tstart);// First column
    var tstop = row[3];
   // Browser.msgBox(tstop);// First column
    var loc = row[31];
    var tom=row[9].toLowerCase();
    var steven=row[10].toLowerCase();
    var lucy=row[11].toLowerCase();
    var day=row[4].toLowerCase();
    if(tom=="add")
    {
      AddtoTom(day,title, tstart, tstop, {description:desc,location:loc});
      dataRange.getCell(parseInt(i)+1,10).setValue('Added'); 
    }
    if(steven=="add")
    {
      AddtoSteven(day,title, tstart, tstop, {description:desc,location:loc});
      dataRange.getCell(parseInt(i)+1,11).setValue('Added'); 
    }
    if(lucy=="add")
    {
      AddtoLucy(day,title, tstart, tstop, {description:desc,location:loc});
      dataRange.getCell(parseInt(i)+1,12).setValue('Added'); 
    }
    //cal.createEvent(title, new Date("March 3, 2010 08:00:00"), new Date("March 3, 2010 09:00:00"), {description:desc,location:loc});
   // cal.createEvent(title, tstart, tstop, {description:desc,location:loc});
 }
}
function AddtoTom(day,title,startdt,enddt,desc)
{
   var cal = CalendarApp.openByName("Tom");
  if(day=="all day")
    **cal.createAllDayEvent(title, **startdt,** desc)**
  else
    cal.createEvent(title, startdt, enddt, desc);

}
function AddtoSteven(day,title,startdt,enddt,desc)
{
   var cal = CalendarApp.openByName("Steven");
 if(day=="all day")
    **cal.createAllDayEvent(title, **startdt**, desc)**
  else
    cal.createEvent(title, startdt, enddt, desc);

}
function AddtoLucy(day,title,startdt,enddt,desc)
{
   var cal = CalendarApp.openByName("Lucy");
 if(day=="all day")
    **cal.createAllDayEvent(title, **startdt**, desc)**
  else
    cal.createEvent(title, startdt, enddt, desc);

}

function onOpen() {
   //  Browser.msgBox('start');// First column
  var menuEntries = [];

  menuEntries.push({name: "Add To Calendar", functionName: "calscript"});
  ss.addMenu("Main Menu", menuEntries);
 // Browser.msgBox('end');// First column
}

function onInstall() {
  onOpen();
}

function onFormSubmit()
{

}
function configure() {
 // Browser.msgBox('trigger');// First column
  ScriptApp.newTrigger("calscript").timeBased().everyMinutes(1).create();
  //Browser.msgBox('trigger ends');// First column
}
4

1 回答 1

0

好吧,我想我是个白痴.......事实证明,这不是一个真正的脚本问题,而是一个夏令时问题,因为在 2013 年 4 月 1 日之后,唯一的结果出现在我之前我的日历、表格/电子表格和脚本的时区设置为 GMT+0000。我只是将它们全部重置为“GMT+0000 没有夏令时”,这似乎解决了这个问题。我向任何有类似日期问题的人推荐这个,其中日期被推迟一天或时间被推迟一个小时。

于 2012-07-25T11:16:19.920 回答