Попытка создать автоматический расчет для часов входного и выходного сценария для листа Google - PullRequest
0 голосов
/ 27 апреля 2019

Я создал сценарий для своей команды на страницах Google, где они могут нажать кнопку, чтобы включить часы, и еще одну кнопку, чтобы отключить ее.

Однако я пытался создать сценарий для автоматического расчета количества часов, которые они отработали за этот период времени, и я не могу его построить.

Я вставил рисунок нескольких блоков с надписью «Бьянка, В и В». Я назначил сценарий каждому блоку для сценария ниже.

Это часть, которая не работает.

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"

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Это сработало. Спасибо!

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 голосов
/ 27 апреля 2019

Ваша проблема в том, что (как вы знаете) finish не определено.Это потому, что переменная является локальной внутри функции onPunchOut(), и ваш оператор if не может напрямую получить доступ к переменной.Переменные имеют две разные области видимости;Вы можете узнать больше о них здесь .Чтобы решить вашу проблему, переместите оператор if внутри закрывающей скобки onPunchOut().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...