如何检查电子表格 A 第 6 列中的数据是否存在于电子表格 B 第 1 列中?

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

我想检查第 6 列中新插入的值是否与另一个 google 工作表中的记录匹配,如果不匹配,我想拒绝用户输入。我的下面的代码有什么问题?

function onnameEdit(e) {var range = e.range;var sheetName = range.getSheet().getName();var column = range.getColumn();var row = range.getRow();var inputValue = e.value;
if (sheetName == 'Join Queue [FOR ADVISEES]' && column == 6) {var sName = inputValue;var db = SpreadsheetApp.openById('1jdEUJK2uw71YAn_AeK3uEQK77oOtGCVOI12TJHWN0QE').getSheetByName('Login');var snameExists = false;
var recordsData = db.getRange("B:B").getValues(); // Assuming the names are in column B (column 2)
for (var i = 0; i < recordsData.length; i++) {
  if (recordsData[i][0].toString().toLowerCase() === sName.toString().toLowerCase()) {
    snameExists = true;
    break;
  }
}

if (!snameExists) {
  SpreadsheetApp.getUi().alert("The entered name does not exist in the records. Please register first, or make sure you're entering the correct name.");
  range.clearContent();
} else {
  var dateCell = range.offset(0, 3); // Assuming the date will be written 3 columns to the right of the edited cell
  if (dateCell.getValue() === "") {
    dateCell.setValue(new Date()); // Set current date and time
  }
}
}}

此外,我还想确保如果接受用户输入,将添加日期单元00

javascript google-sheets google-apps-script
1个回答
0
投票

建议:

由于事件对象

onEdit()
无法工作,因为
openById()
需要授权,所以我在这里所做的解决方法是使用可安装的触发器。 供您参考限制

您可以尝试一下这个脚本:

function checkData() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = ss.getSheetByName("Join Queue [FOR ADVISEES]"); // spreadsheet B
  var activeCell = sheetName.getActiveCell();
  var row = activeCell.getRow();
  var column = activeCell.getColumn();
  var values = sheetName.getRange(2, 6, ss.getLastRow() - 1).getValues();
  
  
  if (column == 6) {
    var sName = values[sheetName.getActiveCell().getRow() - 2][0];
    var db = SpreadsheetApp.openById("16j979b6I9aYH1C05Eh6hqb3lkWSRpvDcd123456").getSheetByName('Login') // change this to your own spreadsheet id for Spreadsheet A
    var sNameExists = false;
    var recordsData = db.getRange("B2:B" + db.getLastRow()).getValues();

    for (var i = 0; i < recordsData.length; i++) {
      if (recordsData[i][0].toString().toLowerCase() == sName.toString().toLowerCase()) {
        sNameExists = true;
        var dateCell = sheetName.getRange(row, column + 3);
        if (dateCell.getValue() == "") {
          dateCell.setValue(new Date());
          break;
        }
      }
    }
    if (!sNameExists) {
      SpreadsheetApp.getUi().alert("The entered name does not exist in the records. Please register first, or make sure you're entering the correct name.");
      activeCell.clearContent();
    }
  }
}

触发设置:

结果:

上面的脚本实现了以下功能:

  1. 接受用户并自动添加输入日期。
  2. 如果用户不存在于电子表格 A 中,它将拒绝并清除编辑的单元格。

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.