1 回答
TA贡献2021条经验 获得超8个赞
两件事情:
row[3]
不存在 - D 列中的值由工作表中的数组公式填充 - 而不是您发布的值。此外,如果要比较名称的小写版本,则需要使用 Sheet1 中的 C 列而不是 A 列如果您按照您的方式使用 for 循环 - 对于名称与行条目不对应的每个循环迭代,您将遇到名称错误情况,并且该
else
语句将直接调用“nameError.html”。
我建议您改用indexOf(),它不仅可以检索工作表中存在的名称,还可以返回位置 - 所以不需要循环。
样本:
function doGet() {
return HtmlService.createTemplateFromFile('Form.html').evaluate().setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
function doPost (e) {
var lock = LockService.getScriptLock();
lock.tryLock(10 * 1000);
try {
var doc = SpreadsheetApp.getActiveSpreadsheet();
var sheet = doc.getSheetByName("Sheet2");
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])
var name = sheet.getRange(nextRow, 4).getValue();
var code = newRow[2];
var sh = doc.getSheetByName("Sheet1");
var names = sh.getRange(2, 3, sh.getLastRow()-1, 1).getValues();
if (names.flat().indexOf(name) != -1) {
var existingCode = sh.getRange(names.flat().indexOf(name)+2, 2).getValue();
if (existingCode == code){
return HtmlService.createTemplateFromFile('Confirmation.html').evaluate()
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
} else {
return HtmlService.createTemplateFromFile('codeError.html').evaluate()
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
}
else {
return HtmlService.createTemplateFromFile('nameError.html').evaluate()
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
}
catch (e) {
return ContentService
.createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
.setMimeType(ContentService.MimeType.JSON)
}
finally { lock.releaseLock() }
}
添加回答
举报