Google apps script 检查Google表单中是否没有具有该ID的记录
我需要通过列中的唯一Id参数通过Google apps script 检查Google表单中是否没有具有该ID的记录,google-apps-script,google-sheets,google-sheets-query,Google Apps Script,Google Sheets,Google Sheets Query,我需要通过列中的唯一Id参数通过existDataInSheet函数检查值,如果我的列表中有具有此Id的记录-我不会再次添加它,并取消函数appendDataInSheet?例如,我的代码每次添加具有相同ID的记录,但我不需要它 function saveQuery(data) { try { var lock = LockService.getPublicLock(); lock.waitLock(2000); //function to check ne
existDataInSheet
函数检查值,如果我的列表中有具有此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;
}
函数保存查询(数据){
试一试{
var lock=LockService.getPublicLock();
洛克·韦特洛克(2000年);
//用于检查新过帐数据的函数
var exist=existDataInSheet(数据,'data');
如果(!存在){
数据=[数据];
附录数据表(数据,“数据”);
}
}最后{
锁。释放锁();
}
}
函数existDataInSheet(数据,sheetName){
变量单元格=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName).getDataRange().getDisplayValues();
var row=data.join(',');
对于(变量i=0;i
existDataInSheet
函数中,每天在列表中添加一次具有两个唯一参数Id(A列)和日期(D列)的记录?例如,我添加了一条ID为111111
且日期为27.06.2020
的记录,之后我无法添加ID为111111
且日期为的记录,但明天我可以在列表中添加ID为111111
且日期为28.06.2020
的新记录,以此类推PropertiesService
类来存储今天已经添加的记录
更多信息:
有很多方法可以做到这一点,正如他在评论中所说的,您可以使用Array.prototype.indexOf()
来检查ID是否在列中,或者如果使用V8并且您有大量数据,因此时间是一个问题,您可以使用建议的,因为这样更快
老实说,为了避免您检查整个列,只存储您今天已经输入的ID并禁止再次输入这些ID会更快
例如,将记录添加到工作表时,可以创建ID为的脚本属性:
函数appendDataInSheet(){
//这里有一些代码
//假设使用.appendRow()输入数据:
表.附录行([id,日期]);
//然后保存ID:
PropertiesService.getScriptProperties().setProperty(id,true);
}
然后,您可以检查该ID的属性是否存在:
函数hasidebeenteredtoday(id){
var properties=PropertiesService.getScriptProperties().getProperties;
如果(属性[id]==true){
返回true;
}
否则{
返回false;
}
}
然后,您可以设置一个基于时间的触发器,使其在每天午夜启动,从而清除当天准备好的所有属性:
函数clearProperties(){
PropertiesService.getUserProperties().deleteAllProperties();
}
设置触发器:
按照编辑>当前项目的触发器
菜单项,在新打开的页面中,单击右下角的+添加触发器
按钮,设置触发器设置,如下所示:
- 选择要运行的函数:
clearProperties
- 选择应运行的部署:
Head
- 选择事件源:
时间驱动
- 选择基于时间的触发器类型:
daytimer
- 选择一天中的时间:
午夜到凌晨1点
indexOf
要快得多。