google-apps-script - 检查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;
}
- 如何在
existDataInSheet
函数中每天一次在 List 中添加具有两个唯一参数 Id(A 列)和 Date(D 列)的记录?例如,我添加了一条带有 ID111111
和日期的记录,27.06.2020
之后我无法添加带有 ID111111
和日期的记录,但是明天我可以在带有 ID 的列表中111111
再次添加带有日期的新记录28.06.2020
,依此类推。
解决方案
回答:
这样做的一种方法是使用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,所以您只需检查它是否已输入即可规避此问题。
参考:
其他阅读:
推荐阅读
- javascript - 如何在熊猫数据框输出中定义索引或点击行数?
- django - 如何增加我的外键模型上的计数器
- javascript - 总是收到错误:pushJsonData 中的 parsererror:SyntaxError:我的脚本中 JSON 输入 [object Object] 意外结束
- regex - 关联组之前的反向引用
- r - 是否有将 VSAM 文件作为 tbble 或数据框导入的 R 包?
- python - 从每个 numpy 行中选择不同的切片
- javascript - 将图像上传到 Node.JS 服务器而不使用
- python-3.x - Visual Studio Code、Conda 和 Python 环境(我无法正常工作)
- pandas - 如何通过 SSH 在 Python/Pandas 中读取 HDF5 文件?
- python - rtf文件的字符编码错误