我创建了一个Google表单,用于从用户那里收集数据。在此表单中,我将询问站点名称,并希望将其替换为唯一的代码。
我已经为此用谷歌应用程序脚本编写了代码,如下所示,但每次它都会生成新的唯一代码,也会替换以前的代码。
function SendConfirmationMail(e) {
try {
var ss, bcc, sendername, subject, columns, username;
var message, value, textbody, usermail, track, code;
// This is your email address and you will be in the BCC
bcc = Session.getActiveUser().getEmail();
// This will show up as the sender's name
sendername = "Support Team";
// This is the submitter's Name
username = e.values[1];
// This is the submitter's email address
usermail = e.values[2];
// Custom subject for Google Docs emails
subject = "Support Ticket";
// Random Code for Google Docs emails
ss = SpreadsheetApp.getActiveSheet();
track = new Array();
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
var string_length = 10;
var lastRow = ss.getLastRow()-1;
var randomstring = '';
for (var i=0; i<string_length; i++) {
var rnum = Math.floor(Math.random() * chars.length);
randomstring += chars.substring(rnum, rnum+1);
}
track.push(randomstring);
code = ss.getRange(2, 5, lastRow, 1).setValue(track);
// This is the body of the auto-reply
message = "Hi <b>" +username+ " !!!</b> <br><br> Your message has been successfully received.<br>";
GmailApp.sendEmail(usermail, subject, messag,
{bcc: bcc, name: sendername, htmlBody: message});
} catch (e) {
Logger.log(e.toString());
}
}但我想为每个提交生成唯一的代码。请及时通知我。
发布于 2014-07-19 03:43:41
我以前也遇到过这类事情,复杂性取决于它所需要的安全性(据我所知,这都是内部的,所以不是很多)。
我不确定我是否理解为什么你要把你独特的代码作为一个可编辑的文本框(我假设站点名称只是一个保留的东西,你最终会把它变成一个不可编辑的div,或者根本不显示它)。
无论哪种方式,一种方法是在properties中保留以前所有唯一代码的数组,尽管如果这是经常使用的,那么这可能太多了(看看quotas,Wolfram Alpha说保守地说它大约有500个单词)。
因此,也许您可以有几个scriptDB(甚至是一个电子表格,尽管速度较慢),您可以将它们组合在一起,以获得所有先前代码的最终数组。您的randomstring算法可能没有问题(只要您检查以确保它不存在于scriptDB数组中)。
查看Generate random string/characters in JavaScript中的其他随机字符串想法,但只需确保(同样,如果这变得非常流行)有足够的新可能性。
您不希望在寻找新代码时挂起此代码,因此如果迭代次数超过100次,我还会添加一个计数器并执行其他操作(如果这都是内部代码,那么使用5-10个字符的代码可能不是一个坏主意,这样可以大大降低找不到新字符串的机会)。
https://stackoverflow.com/questions/24830722
复制相似问题