google脚本防止重复数据提交
google script Prevent duplicate data Submit
我是学习 google 脚本的初学者。
我需要使用 google 脚本将数据从一个 sheet 提交到另一个。当我点击submitData
时,它应该检查它是否是以前输入的数据。如果先前输入数据,代码必须停止。如果是新条目,则数据桅杆发送到“输出”sheet。谁能帮我找出我的错误?
编辑:我准备了一个生物数据格式。我将与我的学校朋友分享这个 google sheet 并要求填写他们的详细信息并单击提交按钮。我希望他们停止发送重复数据。他们的身份号码将在“A3”单元格中提及。这些数据存储在“输出”sheet。身份号码存储在 B 列中。“A3”单元格数据与 OUTPUT 文件中的 B 列数据匹配,如果重复,则消息提示“重复”。
现在,当我 运行 它时,提交到“输出”的数据 sheet 甚至在“A3”单元格中输入了重复的数据。
function submitData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formSS = ss.getSheetByName("input"); //Data entry Sheet
var datasheet = ss.getSheetByName("output");
var ttt = formSS.getRange("A3").getValue();
var values = ss.getSheetByName("output").getDataRange().getValues();
for (var i = 0; i < values.length; i++) {
var row = values[i];
if (row[1] == ttt) { //column B of the "output" sheet has project IDs (Unique Number)
SpreadsheetApp.getUi().alert('Duplicate data. you need to click update');
}
else
{
var values = [[formSS.getRange("E2").getValue(),
formSS.getRange("A3").getValue()]],
datasheet.getRange(datasheet.getLastRow()+1, 1, 1, 2).setValues(values);
}
}
}
“错误”是当 row[1] == ttt
为 true
时没有任何东西可以停止脚本执行。一种可能的 fis 是添加
return;
紧接着
SpreadsheetApp.getUi().alert('Duplicate data. you need to click update');
此函数查看 id 是否与列 B 匹配,如果匹配则更新,如果不匹配则添加新行。
function submitOrUpdateData() {
const ss = SpreadsheetApp.getActive();
const ui = SpreadsheetApp.getUi();
const fsh = ss.getSheetByName("input");
const dsh = ss.getSheetByName("output");
const did = fsh.getRange("A3").getValue();//data id
const colB = dsh.getRange(1, 2, dsh.getLastRow(), 1).getValues();
let idx = colB.indexOf(did);
if (~idx) {
dsh.getRange(idx, 1, 1, 2).setValues([[fsh.getRange("E2").getValue(), fsh.getRange("A3").getValue()]]);//update
} else {
dsh.getRange(dsh.getLastRow() + 1, 1, 1, 2).setValues([[fsh.getRange("E2").getValue(), fsh.getRange("A3").getValue()]]);//new data
}
}
我是学习 google 脚本的初学者。
我需要使用 google 脚本将数据从一个 sheet 提交到另一个。当我点击submitData
时,它应该检查它是否是以前输入的数据。如果先前输入数据,代码必须停止。如果是新条目,则数据桅杆发送到“输出”sheet。谁能帮我找出我的错误?
编辑:我准备了一个生物数据格式。我将与我的学校朋友分享这个 google sheet 并要求填写他们的详细信息并单击提交按钮。我希望他们停止发送重复数据。他们的身份号码将在“A3”单元格中提及。这些数据存储在“输出”sheet。身份号码存储在 B 列中。“A3”单元格数据与 OUTPUT 文件中的 B 列数据匹配,如果重复,则消息提示“重复”。
现在,当我 运行 它时,提交到“输出”的数据 sheet 甚至在“A3”单元格中输入了重复的数据。
function submitData() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var formSS = ss.getSheetByName("input"); //Data entry Sheet
var datasheet = ss.getSheetByName("output");
var ttt = formSS.getRange("A3").getValue();
var values = ss.getSheetByName("output").getDataRange().getValues();
for (var i = 0; i < values.length; i++) {
var row = values[i];
if (row[1] == ttt) { //column B of the "output" sheet has project IDs (Unique Number)
SpreadsheetApp.getUi().alert('Duplicate data. you need to click update');
}
else
{
var values = [[formSS.getRange("E2").getValue(),
formSS.getRange("A3").getValue()]],
datasheet.getRange(datasheet.getLastRow()+1, 1, 1, 2).setValues(values);
}
}
}
“错误”是当 row[1] == ttt
为 true
时没有任何东西可以停止脚本执行。一种可能的 fis 是添加
return;
紧接着
SpreadsheetApp.getUi().alert('Duplicate data. you need to click update');
此函数查看 id 是否与列 B 匹配,如果匹配则更新,如果不匹配则添加新行。
function submitOrUpdateData() {
const ss = SpreadsheetApp.getActive();
const ui = SpreadsheetApp.getUi();
const fsh = ss.getSheetByName("input");
const dsh = ss.getSheetByName("output");
const did = fsh.getRange("A3").getValue();//data id
const colB = dsh.getRange(1, 2, dsh.getLastRow(), 1).getValues();
let idx = colB.indexOf(did);
if (~idx) {
dsh.getRange(idx, 1, 1, 2).setValues([[fsh.getRange("E2").getValue(), fsh.getRange("A3").getValue()]]);//update
} else {
dsh.getRange(dsh.getLastRow() + 1, 1, 1, 2).setValues([[fsh.getRange("E2").getValue(), fsh.getRange("A3").getValue()]]);//new data
}
}