设备日志 Google Sheets - 修复 Google Apps 脚本中的 while/for 循环,以便基于复选框签入/签出

问题描述 投票:0回答:1

我正在尝试在谷歌工作表上创建一个脚本,当我单击一个复选框时,另一张工作表将使用带有该单击日志的新行进行更新。我现在的问题:

我试图获取它,以便当我取消选中该复选框时,它会记录取消选中的时间。我的问题是,我无法从 while 循环或条件循环中找到解决方法,在将其设置为 false 后,它会执行一次操作,并且不会连续执行该操作。这是我的代码:

function hours12(today=(new Date())) { 
  let hours = (today.getHours() + 24) % 12 || 12;
  return hours;
}

function TIMESTAMP() {
  let today = new Date();
  let mins = ('0'+ today.getMinutes()).slice(-2);
  let seconds = ('0'+ today.getSeconds()).slice(-2);
  let hours = hours12(today)
  let date = (today.getMonth()+1)+'-'+today.getDate()+'-'+ (today.getYear()-100);
  let time = hours + ":" + mins + ":" + seconds;
  let dateTime = date+' '+time;
  return dateTime;
}  
function onEdit() {
  let ss = SpreadsheetApp.getActive();
  let sheet = ss.getSheetByName('check-out');
  let logSheet = ss.getSheetByName("equip-log");
  let selectedRow = sheet.getActiveRange().getRow();
  let checkbox = sheet.getRange(selectedRow, 5).getValue();
  let person = sheet.getRange(selectedRow, 2).getValue();
  let equip = sheet.getRange(selectedRow, 1).getValue();
  let condition = sheet.getRange(selectedRow, 4).getValue();
  let checkout = sheet.getRange(selectedRow, 3).getValue();
  
  while (checkbox == true) {
    if (person == '' || equip == '' || condition == '' || checkout == '') {
      Logger.log('Incomplete row information while true');
      break;
    } else {
      addValues(checkbox, logSheet, equip, person, condition, checkout);
      break;
    }
  }
  if (checkbox == false) {
    let logRange = logSheet.getDataRange().getValues();
    for (i=0; i<logRange.length;i++) {
      let rangeValue = logRange[i];
      console.log(selectedRow)
      if (!rangeValue.includes(equip, person, condition)) {
        Logger.log('Incomplete row information while false');
      } else {
        addValues(checkbox, logSheet, equip, person, condition, checkout);
        sheet.getRange(selectedRow, 2).clearContent();
        sheet.getRange(selectedRow, 4).clearContent();
      }
    }
  }
}

function addValues(checkbox, logSheet, equip, person, condition, checkout) {
  const current = TIMESTAMP()
  if (checkbox == true) {
    logSheet.appendRow([equip, person, checkout, '', condition])
  } else {
    logSheet.appendRow([equip, person, '', current,  condition])
  }
} 
javascript loops google-apps-script google-sheets checkbox
1个回答
0
投票

尝试从这样的日志开始:

function onEdit(e) {
  const sh = e.range.getSheet();
  if (sh.getName() == 'check-out' && e.range.columnStart == 5) {
    let [equip, person, checkout, condition, checkbox] = sh.getRange(e.range.rowStart,1,1,5).getValues();
    let logSheet = e.source.getSheetByName("equip-log");
    logSheet.appendRow([new Date(),equip, person, checkout, condition, checkbox])
  }
} 
© www.soinside.com 2019 - 2024. All rights reserved.