google-apps-script - 如何发布具有相同名称的多个输入值
问题描述
我有以下代码,效果很好
function doGet(e) {
return HtmlService.createTemplateFromFile('index').evaluate().setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
function doPost(e){
Logger.log(JSON.stringify(e));
try {
var doc = SpreadsheetApp.openById("SHEET_ID");
var sheet = doc.getSheetByName('Sheet1');
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var nextRow = sheet.getLastRow()+1;
var row = [ new Date() ];
for(var i=1; i< headers.length; i++){
if(headers[i].length>0) {
row.push(e.parameter[headers[i]]);
}
}
sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
}
}
现在我需要在 html 表单中添加具有相同名称的新输入字段,新值我想将它们发布在新行中的工作表中。
也许for
doPost 内部的一些循环会解决它?谢谢你的帮助
html表单:
<form method="post" action="https://script.google.com/macros/s/SCRIPT_ID/exec">
<input name="type" value="test1"/>
<input name="John" value="90"/>
<input name="Lisa" value=""/>
<input name="Sam" value="80"/>
<input name="type" value="test2"/>
<input name="John" value="40"/>
<input name="Lisa" value="60"/>
<input name="Sam" value="100"/>
<input type="submit" value="ok">
</form>
我的工作表如下:
timestamp | type | John | Lisa | Sam
6/01/2020 | test1 | 90 | - | 80
6/01/2020 | test2 | 40 | 60 | 100
我需要在一个提交表单中发布所有数据(两行)(点击)。
解决方案
使用您的代码,我想出了一个可以按照您的意愿工作的解决方案。此解决方案可以处理 2 行或更多行输入数据。
我在这里所做的是遍历每个标题并逐列设置数据,而不是像您所做的那样逐行设置,它所做的只是遍历每个标题,在标题中获取每个值并将其设置在正确的列中。
这是脚本:
function doGet(e) {
return HtmlService.createTemplateFromFile('index').evaluate().setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
function doPost(e){
try {
var doc = SpreadsheetApp.openById("SHEET ID");
var sheet = doc.getSheetByName('Sheet1');
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var columns = sheet.getRange(1, 1, 1, sheet.getLastColumn());
var nextRow = sheet.getLastRow()+1;
var nextColumn = 2;
var row = [ new Date() ];
var columnTi;
var newNextRow = 0;
for(var i=1; i< headers.length; i++){
var columnRange = sheet.getRange(nextRow, nextColumn)
for(var j=0; j< e.parameters[headers[i]].length; j++){
newNextRow = nextRow + j;
columnRange = sheet.getRange(newNextRow, nextColumn)
sheet.getRange(newNextRow, 1).setValue(new Date())
sheet.getRange(columnRange.getA1Notation()).setValue(e.parameters[headers[i]][j])
}
nextColumn++;
}
}
catch(e){Logger.log(e)}
}
推荐阅读
- mysql - INNER JOIN 仅显示表中的第一行
- r - 如何使用 R 中的循环将数据帧保存为唯一名称?
- php - 爆炸元素限制和顺序使用
- dart - 如何在应用栏下方将文本和 CircleAvatar 彼此相对(对面)?
- php - 改进模型属性以提高效率和可用性
- netbeans - 如何改进 Apache NetBeans 9.0 安装说明?
- sql - 转置和扩展列数据集 T-SQL
- c++ - 如何获得 GCC 版本支持特定功能?
- python - TensorFlow 保存多个会话之一
- android - 我无法通过 Android Studio 中的 firebase 数据库的查询搜索获取配置文件名称和图片。应用程序停止工作。有什么修复吗?