教师缩放出勤工具

如何解决教师缩放出勤工具

我是一位老师,正在设计一种工具来利用Zoom使用情况数据(我们生活的日子!)

Zoom提供了一些报告,您可以复制,粘贴和保持表格格式。像这样:

Luke Name Name
lr@email.com
09/10/2020 08:22:03 AM  09/10/2020 08:33:36 AM  12
Barbara Name Name
bar@email.com
09/10/2020 08:22:12 AM  09/10/2020 08:31:57 AM  10
Joaquin Name Name Name
joa@email.com
09/10/2020 08:22:12 AM  09/10/2020 08:31:59 AM  10
Rafaella Name Name
raf@email.com
09/10/2020 08:22:18 AM  09/10/2020 08:31:55 AM  10
Andrea Name Name
and@email.com
09/10/2020 08:22:19 AM  09/10/2020 08:32:14 AM  10
Sara Name Name Name
sar@email.com
09/10/2020 08:22:20 AM  09/10/2020 08:31:56 AM  10

如果将其发布到文本编辑器或Google表格中,它将正确格式化为行和列。

我的代码现在需要很长的信息字符串,并切掉所有不是电子邮件的内容,然后针对班级列表检查电子邮件,以查看谁缺席。我现在想要做的是让它检查迟到的学生。理想情况下,用户将输入字符串并开始上课时间,并显示缺席学生和单独的迟到学生。

我认为我不知道的部分是用户如何将信息复制粘贴到提示或html textarea中,然后正确地将其写入行和列中,以便我可以操纵数据。

代码:

//this function copies the info to a spreadsheet and sets formulas in order to find just emails and check them against a student list

function checkAttendance() {
 
var ss = SpreadsheetApp
var sheet = ss.getActiveSheet();
  
var response =  SpreadsheetApp.getUi().prompt("Student Attendance","Paste emails of students who attended.",SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
  if(response.getSelectedButton() == SpreadsheetApp.getUi().Button.CANCEL) {return}
  
  var responseText = response.getResponseText();
  
  var splitText = responseText.split(" ");
  var atHandle = SpreadsheetApp.getActive().getSheetByName("Attendance Handling");
  
  atHandle.getRange(2,1,200,100).clear();
  
  atHandle.getRange(2,3).setFormula("=FILTER(B2:B,ISNA(MATCH(B2:B,A2:A,0)))");
  
  var colNum = getColNum2("Student Email");
  var rows = sheet.getLastRow();
  
  sheet.getRange(2,colNum,rows-1,1).copyTo(atHandle.getRange(2,2,rows,1));
  
  atHandle.getRange(2,1).setFormula('=TRANSPOSE(SPLIT(E2," "))');
  atHandle.getRange(2,4).setFormula('=FILTER(A2:A,ISNA(MATCH(A2:A,B2:B,0)))')
   atHandle.getRange(2,5).setValue(responseText);
  atHandle.getRange(2,6).setFormula('=if(AND(IFERROR(SEARCH("@",D2),"") <> "",IFERROR(SEARCH("(","") = ""),D2,"")');
   SpreadsheetApp.getActive().getSheetByName("Attendance Handling").getRange(2,6).copyTo(SpreadsheetApp.getActive().getSheetByName("Attendance Handling").getRange(2,6,1));
  atHandle.getRange(2,7).setFormula('=FILTER(F2:F,F2:F <> "")');
 
  
  showAttendance()
  
}

  
function showAttendance() {
  
  var atHandle = SpreadsheetApp.getActive().getSheetByName("Attendance Handling");
   var rows1 = getLastRow(3);
  var rows2 = getLastRow(7)

  var absent = atHandle.getRange(2,3,rows1-1,1).getValues().join("\n");
  var present = atHandle.getRange(2,7,rows2-1,1).getValues().join("\n");
 
  
  var t = HtmlService.createTemplateFromFile('attendance'); // Modified
  t.Absent = absent
  t.Present = present
  
  html = t.evaluate().setWidth(600).setHeight(345); // Added

  SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
    .showModalDialog(html,'Class Attendance');
  
}
<!DOCTYPE html>
<html>

<head>
  <base target="_top">
  
 //style removed for space

</head>
<body>
<form>

  <div>
 
  Absent (in student list but not in pasted values):
    <br>
    <textarea id="tofield" name="tofield" rows="9" cols="60"><?!= Absent ?></textarea>
           <br>
  
  Guests (present in pasted values but not in student list):
    <br>
    <textarea id="tofield" name="tofield" rows="9" cols="60"><?!= Present ?></textarea>
           <br>
           
          


<p>
</p>
   </form>
   
   Note: this information is not saved. Please use or copy and paste this information as needed beforing closing.

<p>
   <button id="btn" style="margin-left: 8px; font-size: 15px; padding: 5px" onclick='google.script.host.close();' class="sbtn btn btn-secondary btn-c">Close</button>
</p>

  
</body>



</html>

解决方法

您需要使用类似google.script.run.doSomething(data)的值将值从客户端传递到服务器端代码,其中doSomething是服务器端函数,而data是一个保存值/您要传递给客户端的对象。

注意:关于可以将哪些值/对象类型传递给服务器端存在一些限制,即,不能传递日期对象,但是您可以将字符串插入相应的毫秒数。


以下代码将输入的样本数据转换为二维数组,可以使用setValues(values)将其传递到图纸。

var data = `Luke Name Name
lr@email.com
09/10/2020 08:22:03 AM  09/10/2020 08:33:36 AM  12
Barbara Name Name
bar@email.com
09/10/2020 08:22:12 AM  09/10/2020 08:31:57 AM  10
Joaquin Name Name Name
joa@email.com
09/10/2020 08:22:12 AM  09/10/2020 08:31:59 AM  10
Rafaella Name Name
raf@email.com
09/10/2020 08:22:18 AM  09/10/2020 08:31:55 AM  10
Andrea Name Name
and@email.com
09/10/2020 08:22:19 AM  09/10/2020 08:32:14 AM  10
Sara Name Name Name
sar@email.com
09/10/2020 08:22:20 AM  09/10/2020 08:31:56 AM  10`;
const arr = data.split('\n');
const matrix = [];
for(let i = 0; i < arr.length;i = i + 3){
  var row = [arr[i],arr[i+1],new Date(arr[i+2].slice(0,22)),new Date(arr[i+2].slice(24,46)),arr[i+2].slice(48)]
  matrix.push(row);
}
console.info(matrix);

我建议您如前所述,在服务器端使用上述命令,因为Date对象不能从客户端传递到服务器端,因此请确保已使用Apps脚本,电子表格和Zoom相同的时区,否则您将对其进行改进以适当地处理时区差异。

资源

,

您可以根据解析出的时间构造一个新的Date对象并进行比较。如果可以获取dat的字符串describeaiotn,则可以将其直接传递给Date的construcotr

new Date('December 17,1995 03:24:00');

一旦有了日期,就可以使用运算符进行比较,并确定学生是否迟到。

function isLate(classStart) {
  var dateStr = /* get the cell value */
  var studentArrvial = Date.parse(dateStr)

  return studentArrival - dateStr > 0
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-