google-apps-script - 将选定的值推送到特定列
问题描述
我的 html 表单有几个字段,但是,我只希望将 id、Confirmation、Questions 和 Notes 发布到我工作表上各自的列中:
我怎样才能实现它?我只能根据与我的表单 name="" 值相同的标题名称将“所有”表单字段发布到他们的列中。
我只希望 id、Confirmation、Questions 和 Notes 映射到它们的右列。
我的代码.gs:
var scriptProp = PropertiesService.getScriptProperties()
function intialSetup () {
var activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
scriptProp.setProperty('key', activeSpreadsheet.getId())
}
function doPost (e) {
var lock = LockService.getScriptLock()
lock.tryLock(10000)
try {
var sheetName = e.parameter.svdate.split("/").splice(0, 2).map(function(e){return e.replace(/^0/, "")}).join("/");
var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'));
var sheet = doc.getSheetByName(sheetName);
if (!sheet) throw new Error("Sheet Name was not found.");
var headers = sheet.getRange(1, 1, 1, 10).getValues()[0]
var nextRow = sheet.getLastRow() + 1
var newRow = headers.map(function(header) {
return header === 'timestamp' ? new Date() : e.parameter[header]
})
var find = sheet.getRange(1, 1, sheet.getLastRow()).createTextFinder(newRow[0]).matchEntireCell(true).findNext();
sheet.getRange(find ? find.getRow() : nextRow, 1, 1, newRow.length).setValues([newRow]);
return ContentService
.createTextOutput(e.parameter.callback + "(" + JSON.stringify({ 'result': 'success', 'row': nextRow })+ ")")
.setMimeType(ContentService.MimeType.JAVASCRIPT);
}
catch (e) {
return ContentService
.createTextOutput(e.parameter.callback + "(" + JSON.stringify({ 'result': 'error', 'error': e })+ ")")
.setMimeType(ContentService.MimeType.JAVASCRIPT)
}
finally {
lock.releaseLock()
}
}
解决方案
我相信你的目标如下。
- 提交 HTML 表单时,您只想将 的值放入
id, Confirmation, Questions, and Notes
电子表格。
在这种情况下,如何进行以下修改?
从:
var newRow = headers.map(function(header) {
return header === 'timestamp' ? new Date() : e.parameter[header]
})
至:
var keys = ["id", "confirmation", "questions", "notes"];
var newRow = headers.map(function (header) { return header === 'timestamp' ? new Date() : keys.includes(header.toLowerCase()) ? e.parameter[header] : "" });
- 在此修改中,使用
keys
检索特定键的值。
参考:
添加:
从您的以下回复中,
你好田池。您建议的代码中有一个问题。它将其他列的值替换为 null,例如 Payment Method、LA Customer、Cleaners 等。
在这种情况下,请在您的问题中修改您的脚本,如下所示。
从:
var newRow = headers.map(function(header) {
return header === 'timestamp' ? new Date() : e.parameter[header]
})
var find = sheet.getRange(1, 1, sheet.getLastRow()).createTextFinder(newRow[0]).matchEntireCell(true).findNext();
sheet.getRange(find ? find.getRow() : nextRow, 1, 1, newRow.length).setValues([newRow]);
至:
var keys = ["id", "confirmation", "questions", "notes"];
var newRow = headers.map(function (header) { return header === 'timestamp' ? new Date() : ~keys.indexOf(header.toLowerCase()) ? e.parameter[header] : "" });
var find = sheet.getRange(1, 1, sheet.getLastRow()).createTextFinder(newRow[0]).matchEntireCell(true).findNext();
if (find) {
var range = sheet.getRange(find.getRow(), 1, 1, newRow.length);
var rowValue = range.getValues()[0].map(function(c, i) {return newRow[i] || c});
range.setValues([rowValue]);
} else {
sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow]);
}
推荐阅读
- sql-server - MS-SQL 单用户模式查询中断
- python-3.x - Letsencrypt / certbot 颁发证书时“无法在 UTF-8 中正确解码”警告消息
- ruby-on-rails - 在应用程序中包含 Rails 引擎布局后会出现路由错误?
- git - 如何获取上一个版本和当前快照版本之间的提交?
- c# - 有人可以帮我建立这个方法吗?
- javascript - 输入长度大于 0 不能正常工作
- javascript - Typescript 中的函数向量
- django - 在 Django 模型中,需要对两个字段进行验证,一个下拉字段选项使另一个字段成为必填项
- django - Django NoReverseMatch 异常
- python - 如何从来自 Flipkart 网站的 div 标签中的图片标签中获取图片 url?