簡體   English   中英

如何在第一次編輯單元格后僅5分鍾允許編輯?

[英]How to allow editing only 5 minutes after first edit to the cell?

我正在制作一個Google電子表格,供我校區的學生會顧問填寫。 我正在嘗試使之填充單元格,因此無法再對其進行編輯。 我發現以下代碼可防止在輸入數據后對單元格進行編輯。

function onEdit() {

var masterSheetName = "Master" 
var helperSheetName = "Helper" 
var firstDataRow = 1; 
var firstDataColumn = 1;

var ss = SpreadsheetApp.getActiveSpreadsheet();
var masterSheet = ss.getActiveSheet();
if (masterSheet.getName() != masterSheetName) return;
var masterCell = masterSheet.getActiveCell();
if (masterCell.getRow() < firstDataRow || masterCell.getColumn() <     firstDataColumn) return;

var helperSheet = ss.getSheetByName(helperSheetName);
var helperCell = helperSheet.getRange(masterCell.getA1Notation());
var newValue = masterCell.getValue();
var oldValue = helperCell.getValue();

if (oldValue == "") {
helperCell.setValue(newValue);
} else {
masterCell.setValue(oldValue);
}
}

這足夠好,但是我需要延遲,以防萬一有人弄亂了輸入信息,他們有時間修復它。 我嘗試使用Utility.Sleep()來執行此操作,但是它似乎沒有效果。 我該如何延遲此信息的最終確定,以便輸入者有時間確定他們的回答?

您可以添加另一個工作表來存儲第一次編輯單元格的時間。 嘗試這個

function onEdit() {
  var masterSheetName = "Master" 
  var helperSheetName = "Helper" 
  var timeSheetName = "Time" 
  var firstDataRow = 1; 
  var firstDataColumn = 1;

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var masterSheet = ss.getActiveSheet();
  if (masterSheet.getName() != masterSheetName) return;
  var masterCell = masterSheet.getActiveCell();
  if (masterCell.getRow() < firstDataRow || masterCell.getColumn() < firstDataColumn) return;

  var helperSheet = ss.getSheetByName(helperSheetName);
  var timeSheet = ss.getSheetByName(timeSheetName);
  var helperCell = helperSheet.getRange(masterCell.getA1Notation());
  var timeCell = timeSheet.getRange(masterCell.getA1Notation());
  var newValue = masterCell.getValue();
  var oldValue = helperCell.getValue();
  var time = timeCell.getValue();

  if (oldValue == "" || time === "") {
    helperCell.setValue(newValue);
    timeCell.setValue(new Date());
  } else if(Date.now() - time < 5000) {
    helperCell.setValue(newValue);
  } else {
    masterCell.setValue(oldValue);
  }
}

當然,您還應該隱藏並保護“幫助程序和時間表”,以便其他人無法對其進行編輯。

如果單元格為空白(首次訪問),則在函數外部獲取一個全局變量並設置當前日期時間。希望以下代碼對您有所幫助。

var firstEntryTime = null;

function onEdit() {
    var currentDateTime = new Date();
    var masterSheetName = "Master" 
    var helperSheetName = "Helper" 
    var firstDataRow = 1; 
    var firstDataColumn = 1;

    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var masterSheet = ss.getActiveSheet();
    if (masterSheet.getName() != masterSheetName) return;
    var masterCell = masterSheet.getActiveCell();
    if (masterCell.getRow() < firstDataRow || masterCell.getColumn() <     firstDataColumn) return;

    var helperSheet = ss.getSheetByName(helperSheetName);
    var helperCell = helperSheet.getRange(masterCell.getA1Notation());
    var newValue = masterCell.getValue();
    var oldValue = helperCell.getValue();

    if (oldValue == "") {
        helperCell.setValue(newValue);
        firstEntryTime = currentDateTime;
    } else if (currentDateTime.getMinutes() >= firstEntryTime.getMinutes() + 5) {
        masterCell.setValue(oldValue);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM