首页 > 解决方案 > 尝试为谷歌工作表的数小时进出脚本创建自动计算

问题描述

我在 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**

实际结果:试图获得工作时间的脚本错误。说找不到变量“完成”

标签: google-apps-scriptgoogle-sheets

解决方案


您的问题是(如您所知)finish没有定义。这是因为变量是函数内部的局部变量onPunchOut(),您的if语句不能直接访问该变量。变量有两种不同的范围;您可以在此处了解有关它们的更多信息。要解决您的问题,请将if语句移到onPunchOut().


推荐阅读