检查 Google 个工作表中是否没有具有该 ID 的记录

Checking if there is not record with that ID in in Google Sheets

我需要通过 existDataInSheet 函数通过 A 列中的唯一 Id 参数检查值,如果我的列表中有包含此 ID 的记录 - 我不会添加它再次无效函数appendDataInSheet?比如我的代码每次都添加相同ID的记录,但是我不需要。

function saveQuery(data) {
  try {
    var lock = LockService.getPublicLock();
    lock.waitLock(2000);
    
    //function to check new Posting data
    var exist = existDataInSheet(data, 'Data');
    if (!exist) {
      data = [data];
      appendDataInSheet(data, 'Data');
    }
    
  } finally {
    lock.releaseLock();
  }
}


function existDataInSheet(data, sheetName) {  
    var cells = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName).getDataRange().getDisplayValues();
    var row = data.join(',');
    for (var i = 0; i < cells.length; i++) {
      var current = cells[i].join(',');
      if (row === current) {
        return true;
      }
    }
    return false;
}
  1. 如何在 existDataInSheet 函数中每天添加一次具有两个唯一参数 Id(A 列)和 Date(D 列)的记录?例如,我添加了一条 ID 111111 和日期 27.06.2020 的记录,之后我无法添加 ID 111111 和日期的记录,但明天我可以在列表中添加 ID 为新记录111111 再次使用日期 28.06.2020 等等。

答案:

一种方法是使用 PropertiesService class 来存储今天已经添加的记录。

更多信息:

有很多方法可以做到这一点,正如 Cooper said in his comment you can use Array.prototype.indexOf() to check if the ID is in the column, or if using V8 and you have large amounts of data so time is an issue, you can use a Set as Sunny Patel 所建议的那样,因为这样做要快得多。

老实说,为了避免您检查整个列,只存储您今天已经输入的 ID 并禁止再次输入这些 ID 会更快。

例如,将记录添加到sheet时,您可以创建ID为

的脚本属性
function appendDataInSheet() {
  // some code goes here
  // assuming you use .appendRow() to enter the data:
  sheet.appendRow([id, date]);
  
  // then save the ID:
  PropertiesService.getScriptProperties().setProperty(id, true);
}

然后您可以检查该 ID 的 属性 是否存在:

function hasIdBeenEnteredToday(id) {
  var properties = PropertiesService.getScriptProperties().getProperties;

  if (properties[id] === true) {
    return true;
  }
  else {
    return false;
  }
}

然后您可以设置一个基于时间的触发器在每天午夜触发,这会清除您当天准备好的所有属性:

function clearProperties() {
  PropertiesService.getUserProperties().deleteAllProperties();
}

设置触发器:

进入Edit > Current project's triggers菜单项,在新打开的页面中,点击右下方的+ Add Trigger按钮,设置触发设置如下:

  • 选择要运行的功能:clearProperties
  • 选择应该运行的部署:Head
  • Select 事件来源:Time-driven
  • Select 基于时间的触发器类型:Day timer
  • Select 时间:Midnight to 1am

然后按保存。

这不会直接检查 Sheet 以查看 ID 是否存在,但是因为您存储了今天存储的所有 ID,所以您只需检查它是否已经输入即可规避此问题。

参考文献:

其他阅读: