来自多位教师的出勤表格

时间:2017-07-16 07:48:51

标签: google-sheets google-form

我是音乐学院的经理,我正面临一个问题,我试图用谷歌表格来解决。

问题:由于目前的系统非常繁重且难以操作,教师不会填写考勤表格。大多数教师都很老,不适合使用电脑。 但 - 他们有智能手机

我想通过让他们填写一个简单的表格来解决它(他们将通过电子邮件链接到这个表格,所以他们:打开邮件 - 点击链接并获取表格 - 填写 - 提交 - 瞧)。

有12名教师,约150名学生。当然,每个老师都只需要看他的学生。

我尝试使用代码从电子表格中自动填充名称,直到我将一个工作集从一个教师复制到另一个教师之前,它一直运行良好。在那时,新表格从以前的老师那里得到了名字,而我似乎无法修复它。

所需的解决方案 - 一个简单的表单,教师的所有学生的姓名都显示在多个复选框中,因此教师将检查每个上课的学生,以及提交。 所有信息都应存储在同一个电子表格中,每个教师都有不同的标签。

重要的注意事项 - 课程是1对1 - 吉他钢琴等。但是我不需要逐一填写表格,老师可以填写所有在一天一天展示的学生 - 然后提交。

任何帮助都将深表感谢!

电子

1 个答案:

答案 0 :(得分:1)

这是一个考勤记录器的简单例子

Code.gs

function onOpen()
{
  SpreadsheetApp.getUi().createMenu('My Tools')
    .addItem('Take Roll', 'getRollList')
    .addToUi();
}

Attendance.gs

function getRollList()
{
  var ss=SpreadsheetApp.getActive();
  var sht=ss.getSheetByName('Roll');
  var rng=sht.getRange(1,1,sht.getLastRow(),4);
  var rngA=rng.getValues();
  var s='';
  for(var i=1;i<rngA.length;i++)
  {
    var dataA={};
    for(var j=0;j<4;j++){dataA[rngA[0][j]]=rngA[i][j];}//StudentID,Last,First,Middle
    s+='<div  id="' + dataA.StudentID + '" ><input type="checkbox" name="roll" value="' + dataA.StudentID + '" /><strong>' + dataA.StudentID + '</strong> - ' + dataA.Last + ', ' + dataA.First + dataA.Middle + '</div>';
  }
   s+='<br /><input type="button" value="Exit" onClick="google.script.host.close();" /><input type="button" value="Record Attendance" onClick="getCheckedBoxes(\'roll\');" />';
   s+='</body></html>';

   var html=HtmlService.createHtmlOutputFromFile('attendance').setWidth(400).setHeight(450);
   html.append(s);
   SpreadsheetApp.getUi().showModelessDialog(html, 'Attendance Sheet');
}

function recordAttendance(present)
{
  var ss=SpreadsheetApp.getActive();
  var sht=ss.getSheetByName('Roll');
  var rng=sht.getRange(1,1,sht.getLastRow(),sht.getLastColumn()+1);
  var rngA=rng.getValues();
  for(var i=0;i<rngA.length;i++)
  {
    if(i==0)
    {
      rngA[i][rngA[0].length-1]=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "E MM/dd");
    }
    else
    {
      if(present.indexOf(rngA[i][0])>-1)
      {
        rngA[i][rngA[0].length-1]='X';
      }
      else
      {
        rngA[i][rngA[0].length-1]='0';
      }      
    }
  }
  rng.setValues(rngA);
  return true;
}

function displayMessage(msg)
{
  var output=HtmlService.createHtmlOutputFromFile('attendance')
  output.append(msg + '<br />' + 'Date: ' + Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy"));
  SpreadsheetApp.getUi().showModelessDialog(output, 'Attendance has been Recorded')
}

attendance.html

<!DOCTYPE html>
<html>
  <head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script>
function getCheckedBoxes(chkboxName) {
  var checkboxes=document.getElementsByName(chkboxName);
  var present = [];
  var absent=[];
  for (var i=0; i<checkboxes.length; i++) 
  {
     if (checkboxes[i].checked) 
     {
        present.push(checkboxes[i].value);
     }
  }
  google.script.run
    .withSuccessHandler(setResponse)
    .recordAttendance(present);
}

function setResponse()
{
  google.script.run.displayMessage('Attendance Recorded')
}
console.log('script here');
</script>
   </head>  
  <body>

我的电子表格在开始之前

enter image description here

滚动后我的电子表格

enter image description here

考勤记录表:

enter image description here

最后的消息对话框

enter image description here