首页 > 解决方案 > 检查Google表格中是否没有具有该ID的记录

问题描述

我需要通过A 列中existDataInSheet的唯一Id参数通过函数检查值,如果我的列表具有此 id 的记录 - 我不会再次添加它并且 void 函数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函数中每天一次在 List 中添加具有两个唯一参数 Id(A 列)和 Date(D 列)的记录?例如,我添加了一条带有 ID111111和日期的记录,27.06.2020之后我无法添加带有 ID111111和日期的记录,但是明天我可以在带有 ID 的列表中111111再次添加带有日期的新记录28.06.2020,依此类推。

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-query

解决方案


回答:

这样做的一种方法是使用PropertiesService该类来存储今天已经添加的记录。

更多信息:

有很多方法可以做到这一点,正如Cooper在他的评论中所说,您可以使用它Array.prototype.indexOf()来检查 ID 是否在列中,或者如果使用 V8 并且您有大量数据所以时间是一个问题,您可以使用按照Sunny Patel的建议设置,因为这样更快。

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

例如,将记录添加到工作表时,您可以使用 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
  • 选择事件源:Time-driven
  • 选择基于时间的触发器类型:Day timer
  • 选择一天中的时间:Midnight to 1am

然后按保存。

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

参考:

其他阅读:


推荐阅读