繁体   English   中英

Google Sheets 时间跟踪器:更新 #1

[英]Google Sheets Time Tracker: Update #1

我正在尝试根据此处的视频创建时间表。 然而,在视频中,他设置了它是为两个用户构建的,而我的只为一个用户构建。

当用户按下按钮(实际上是绘图)打卡时,我希望将时间记录在单元格 B2 中,并将状态(输入)记录在 E2 中。 同样,当用户按下按钮(另一幅图)打卡时,我希望时间记录在C2中,状态(Out)仍然记录在E2中。 D 列将说明经过的时间长度,这将用于确定每周工资。

这是为“时钟输入”按钮分配“输入”功能而为“时钟输出”按钮分配“输出”功能的脚本:

function setValue(cellName, Value) {
  SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).setValue(Value);
}

function getValue(cellName) {
  return SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).getValue();
}

function getNextRowIn() {
  return SpreadsheetApp.getActiveSpreadsheet().getLastRow() - 6;
}

function getNextRowOut() {
  return SpreadsheetApp.getActiveSpreadsheet().getLastRow() - 6;
}

function addRecordIn(b) {
  var row = getNextRowIn ();
   setValue('B' + row, b);
}

function addRecordOut(c) {
  var row = getNextRowOut ();
   setValue('C' + row, c);
}

function In() {
  setValue('E2', 'In');
  addRecordIn(new Date());
}

function Out() {
  setValue('E2', 'Out');
  addRecordOut(new Date());
}

我需要做什么才能使这段代码生效,以便每次用户按下“时钟输入”时,它都会按顺序记录在 B 列中,从 B2 开始。 从 C2 开始,C 列中的时钟输出也是如此?

这是我正在使用的工作表的图片:在 Imgur 上查看

这是我要做的方式。

时间记录.html:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script>
    $(function() {

      });
      function punchIn(){
        google.script.run.punchIn();
      }
      function punchOut(){
        google.script.run.punchOut();
      }

    console.log('My Code');
    </script>
  </head>
  <body>
   <input type="button" value="Punch In" onClick="punchIn()" />
   <input type="button" value="Punch Out" onClick="punchOut()" />
  </body>
</html>

代码.gs:

function onOpen(){
  SpreadsheetApp.getUi().createMenu('My Tools')
     .addItem('Time Clock', 'showTimeTrackerSidebar')
     .addToUi();
}

function punchIn() {
  SpreadsheetApp.getActive().getSheetByName('Time Record').appendRow([Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MMM dd yyyy HH:mm:ss")])
}

function punchOut(){
  var ss=SpreadsheetApp.getActive()
  var sh=ss.getSheetByName('Time Record');
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var lr=vA[vA.length-1];
  var outdt=Utilities.formatDate(new Date(),Session.getScriptTimeZone(),"MMM dd yyyy HH:mm:ss");
  vA[vA.length-1][1]=outdt;
  vA[vA.length-1][2]=calcTimeDifference(vA[vA.length-1][0],outdt);
  rg.setValues(vA);
}

function showTimeTrackerSidebar(){
  var ui=HtmlService.createHtmlOutputFromFile('timerecord');
  SpreadsheetApp.getUi().showSidebar(ui);
}

function calcTimeDifference(Start,End)
{
  if(Start && End)
  {
    var hour=1000*60*60;
    var t1=new Date(Start).valueOf();
    var t2=new Date(End).valueOf();
    var d=t2-t1;
    var hours=d/hour;
    return hours
  }
  else
  {
    return 'Invalid Inputs';
  }
}

这是屏幕的样子:

在此处输入图片说明

此视图显示菜单

在此处输入图片说明

我没有使用图像构建伪按钮,而是使用侧边栏并使用标准的<input type="button" value="Punch Out" onClick="punchOut();" /> <input type="button" value="Punch Out" onClick="punchOut();" />这更容易扩展到其他功能。 您需要在此处查看 google.script.run 功能。 您还需要运行一次 onOpen 以使用侧边栏功能更新菜单。

这将附加一个新的日期时间与打孔和打孔,并添加一个日期时间并计算最后一行的差异。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM