首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试为google sheet创建进出小时数的自动计算脚本

尝试为google sheet创建进出小时数的自动计算脚本
EN

Stack Overflow用户
提问于 2019-04-27 07:23:19
回答 2查看 67关注 0票数 0

我在google sheets中为我的团队创建了一个脚本,他们可以单击一个按钮打卡,另一个按钮打卡退出。

然而,我一直在尝试创建一个脚本来自动计算他们在这段时间内的工作时数,但我无法构建它。

我插入了一张画,上面写着Bianca,进进出出。我为下面的脚本的每个块分配了一个脚本。

这是不起作用的部分。

代码语言:javascript
复制
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");
}

当前用于打卡的代码:

代码语言:javascript
复制
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');
}

预期结果:

代码语言:javascript
复制
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“

EN

回答 2

Stack Overflow用户

发布于 2019-04-27 11:26:42

您的问题是(如您所知)没有定义finish。这是因为该变量是函数onPunchOut()中的局部变量,而您的if语句不能直接访问该变量。变量有两种不同的作用域;您可以通过here了解有关它们的更多信息。要解决您的问题,请将if语句移到onPunchOut()的结束括号中。

票数 0
EN

Stack Overflow用户

发布于 2019-04-30 00:03:30

这招奏效了。谢谢!

代码语言:javascript
复制
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");
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55875949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档