我正在尝试根据视频here制作时间表。但是,在视频中,他设置它以便为两个用户构建,而我的仅用于一个用户。
当用户按下按钮(实际上是图纸)时,我希望将时间记录在单元格B2中,并将状态(中)记录在E2中。同样,当用户按下按钮(另一个图纸)以进行退出时,我希望将时间记录在C2中,并且状态(Out)仍然记录在E2中。 D栏将告知经过的时间,这将用于确定每周工资。
这里是" Clock In"按钮被分配了" In"功能和"时钟输出"按钮被分配了" Out"功能:
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());
}
我需要做些什么才能使这个代码工作,以便每次用户按下" Clock In"它从B列顺序记录,从B2开始。 C列中的时钟输出相同,从C2开始?
以下是我正在使用的工作表的图片: View it on Imgur
答案 0 :(得分:1)
这就是我的方式。
<强> timerecord.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>
<强> code.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();" />
这样可以更容易地扩展到其他功能。您需要查看google.script.run功能here。您还需要运行onOpen一次以使用siderbar功能更新菜单。这将使用punchIn和punchOut追加新的日期时间,并添加日期时间并计算最后一行的差异。