按钮谷歌电子表格上的时间戳

时间:2014-03-15 01:35:32

标签: javascript button time google-apps-script google-sheets

我有一个只有在特定单元格为空时才可见的按钮。如果单元格为空并按下按钮,则会向该特定单元格添加日期和时间。我的问题是,当时间已经过了凌晨4点时,是否有可能让按钮检查下面的1行,所以代替检查单元格B2它将检查B3 这是我目前的代码:

    function doGet() {
  var ss = SpreadsheetApp.openById('key');
  var sheet = ss.getSheetByName('klant');
  var klant = sheet.getRange(2, 1, sheet.getLastRow()-1, 1).getValues();
  Logger.log(klant)


  var app = UiApp.createApplication().setTitle('Gym Check In');
  var grid = app.createFlexTable().setId('grid');
  app.add(grid);

  var row = 0;
  var column = 0;
  var enable=false;

  for (var m in klant) {    

    grid.setWidget(row, 0, app.createLabel(klant[m]));

    if(sheet.getRange('G2').getValue()==''){enable=true}
      grid.setWidget(row, 1, app.createButton('Check In').setEnabled(enable).setId(row+2).addClickHandler(app.createServerHandler('checkIn').addCallbackElement(grid)).addClickHandler(app.createClientHandler().forEventSource().setEnabled(false)));}
  if(!enable){grid.setWidget(row, 1, app.createHTML('<b>Error:</b>'));}
  return app;
}

function checkIn(e) {
  var ss = SpreadsheetApp.openById('key');
  var sheet = ss.getSheetByName('klant');

  var button = e.parameter.source;

  sheet.getRange(button, 7).setValue(new Date());
  sheet.getRange(button, 8).setValue(Session.getActiveUser());    
}

1 个答案:

答案 0 :(得分:0)

你的示例代码中有一些错误和拼写错误,我设置了一个只使用一个服务器处理程序的新版本(不需要为每个按钮创建一个,因为它们都调用相同的处理函数)和一个客户端处理程序(出于同样的原因:对源代码产生相同的影响)。

然后你忘记增加行并在每次迭代后将enable重置为false。

我使用简单的getHours()javascript方法添加了日期比较(参见doc on date object here

这是完整的代码,我希望它足够清楚......如果没有,请不要犹豫再回到这里。

function doGet() {
  var ss = SpreadsheetApp.openById('1Zfs3LnVYx2JzaZvasdyQek6_FnqelO95VLrKH8gconA');
  var sheet = ss.getSheetByName('klant');
  var klant = sheet.getRange(1,1,sheet.getMaxRows(),sheet.getLastColumn()).getValues();
  var headers = klant.shift();
  Logger.log(headers);
  Logger.log(klant);
  var time = new Date().getHours();
  Logger.log(time);
  var app = UiApp.createApplication().setTitle('Gym Check In');
  var grid = app.createFlexTable().setId('grid').setStyleAttributes({'marginLeft':'60px'});
  app.add(grid);

  var row = 0;
  var column = 0;
  var enable=false;
  var handler = app.createServerHandler('checkIn').addCallbackElement(grid); 
  var cHandler = app.createClientHandler().forEventSource().setEnabled(false)
  for (var m=0 ; m<klant.length-1 ; m++) {  
    Logger.log('value in col 7 and row '+m+' = '+klant[m][6]);
    grid.setWidget(row, 0, app.createLabel(klant[m][0]));
    if(time<4){    
      if(klant[Number(m)+1][6]=='' ){enable=true}
    }else{
      Logger.log(Number(m)+1)
      if(klant[Number(m)+1][6]=='' ){enable=true}
    }
    grid.setWidget(row, 1, app.createButton('Check In').setEnabled(enable).setId(row+2).addClickHandler(handler).addClickHandler(cHandler));

    if(!enable){grid.setWidget(row, 1, app.createHTML('<b>Error:</b>'));}
    row++;
    enable=false;
  }
  return app;
}

function checkIn(e) {
  var ss = SpreadsheetApp.openById('1Zfs3LnVYx2JzaZvasdyQek6_FnqelO95VLrKH8gconA');
  var sheet = ss.getSheetByName('klant');

  var button = e.parameter.source;

  sheet.getRange(button, 7).setValue(new Date());
  sheet.getRange(button, 8).setValue(Session.getActiveUser());    
}