首页 > 解决方案 > 如何发布具有相同名称的多个输入值

问题描述

我有以下代码,效果很好

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 表单中添加具有相同名称的新输入字段,新值我想将它们发布在新行中的工作表中。

也许fordoPost 内部的一些循环会解决它?谢谢你的帮助

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

我需要在一个提交表单中发布所有数据(两行)(点击)。

标签: google-apps-script

解决方案


使用您的代码,我想出了一个可以按照您的意愿工作的解决方案。此解决方案可以处理 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)}
}

推荐阅读