工作表中的宏脚本专家帮助我编写代码。我在宏脚本中尝试过这种方法
var sheetName = 'records';
var scriptProp = PropertiesService.getScriptProperties();
function intialSetup() {
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
scriptProp.setProperty('key', activeSpreadsheet.getId());
}
function usernameExists(username) {
var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'));
var sheet = doc.getSheetByName(sheetName);
var dataToCheck = username.toLowerCase();
var values = sheet.getRange("A:A").getValues();
for (var i = 0; i < values.length; i++) {
var cellData = values[i][0].toString().toLowerCase();
if (cellData === dataToCheck) {
return true;
}
}
return false;
}
function doPost(e) {
var lock = LockService.getScriptLock()
lock.tryLock(10000)
var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'));
var sheet = doc.getSheetByName(sheetName);
// var postData = JSON.parse(e.postData.contents);
// var usernameToCheck = postData['username'];
// var usernameToCheck = e.parameter.username;
var usernameToCheck = e.parameter['username']
if (usernameExists(usernameToCheck)) {
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'error', 'error': 'Username already exists' }))
.setMimeType(ContentService.MimeType.JSON);
}
try {
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var nextRow = sheet.getLastRow() + 1;
var newRow = headers.map(function (header) {
return header === 'timestamp' ? new Date() : e.parameter[header];
});
sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow]);
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow }))
.setMimeType(ContentService.MimeType.JSON);
}
catch (e) {
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
.setMimeType(ContentService.MimeType.JSON);
}
finally {
lock.releaseLock()
}
}
目标是检查传入数据是否存在于工作表 A 列(即“用户名”字段)中,如果存在则跳过保存过程。我什至尝试使用 postData 但仍然保存数据(如果存在)。我还创建了一个可以工作的测试函数,但它在使用 javascript 的实际数据中不起作用,它不起作用。这是我的测试功能
function checker() {
if (usernameExists('userTest')) {
Logger.log("Username already exists.");
} else {
Logger.log("Username doesn't exist.");
}
}
我还尝试使用
usernameToCheck.toString()
将参数转换为字符串
这是我在 javascript 文件中的代码
var form = document.getElementById('myForm');
function submitForm() {
fetch(scriptURL, { method: 'POST', body: new FormData(form)})
.then(response => showSuccessMessage(response))
.catch(error => showErrorMessage(error))
}
这是我调试的第二天。或者说这可行吗?
问题解决了!这就是我所做的。
在帖子请求中添加参数解决了问题,我添加了
fetch(scriptURL+'?username=' + usernameToCheck.value, { method: 'POST', body: formData})
var usernameToCheck = e.parameter['username']
var usernameToCheck = e.parameter['username']
var usernameToCheck = e.parameter.username