google-apps-script - 尝试为谷歌工作表的数小时进出脚本创建自动计算
问题描述
我在 google 表格中为我的团队创建了一个脚本,他们可以在其中单击一个按钮来打卡,另一个按钮来打卡。
但是,我一直在尝试创建一个脚本来自动计算他们在该时间范围内工作的小时数,但我无法构建它。
我插入了几块图,上面写着 Bianca, In and Out。我为下面的脚本的每个块分配了一个脚本。
这是不工作的部分。
function onPunchOut (){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var lastRow = sheet.getLastRow();
var finish = sheet.getRange("E"+lastRow).getValue();
var hoursWorked = sheet.getRange("F"+lastRow);
}
if (finish === "Out") {
hoursWorked.setFormulaR1C1('=R[0]C[-2]-R[-1]C[-2]');
hoursWorked.setNumberFormat("H:mm");
}
用于打卡和打卡的当前代码:
function setValue(cellName, value) {
SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).setValue(value);
}
function getValue(cellName){
return SpreadsheetApp.getActiveSpreadsheet().getRange(cellName).getValue();
}
function getNextRow() {
return SpreadsheetApp.getActiveSpreadsheet().getLastRow() + 1;
}
function setBianca() {
setValue('L1' , 'Bianca');
}
function addRecord(a, b, c){
var row = getNextRow();
setValue('A' + row, a);
setValue('D' + row, b);
setValue('E' + row, c);
}
function punchInBianca(){
addRecord(getValue('L1'), new Date(), 'In');
}
function punchOutBianca(){
addRecord(getValue('L1'), new Date(), 'Out');
}
预期成绩:
Name Date/Time In/Out **Hours worked**
Bianca 4/25/2019 7:59:34 In **3.15**
Bianca 4/25/2019 11:15:20 Out **0.29**
Bianca 4/25/2019 11:44:44 In **4.55**
实际结果:试图获得工作时间的脚本错误。说找不到变量“完成”
解决方案
您的问题是(如您所知)finish
没有定义。这是因为变量是函数内部的局部变量onPunchOut()
,您的if
语句不能直接访问该变量。变量有两种不同的范围;您可以在此处了解有关它们的更多信息。要解决您的问题,请将if
语句移到onPunchOut()
.
推荐阅读
- plot - 为 Power BI 上的柱形图添加 % 标签
- c++ - 如何在 c++11 中使用 lamda 表达式过滤 std::map 键
- javascript - 在anychart中为堆叠折线组合图中的每个堆栈赋予不同的颜色
- c - 我可以将变量类型作为 C 语言函数中的参数传递吗?
- html - 使用 jquery 延迟预加载器淡出
- c# - 如果我有一个对象列表,如何使用 LINQ 在 SQL Server 表中查询这些对象的属性?
- excel - Excel VBA:在for循环中跳过复制的单元格
- node.js - 尝试使用 FFMPEG 通过 RTMP 流式传输实时视频时收到连接被拒绝错误
- acumatica - 登录 Acumatica 20 R2 时出现问题
- android - Cordova-android v 9.0.0 构建失败。无效的 Cordova android 平台。缺少 API.js