[英]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.