表单向表单提交数据后,向表单中的事件添加数字

时间:2019-12-30 16:25:37

标签: google-apps-script

我正在尝试创建一个脚本,以便在提交表单并将数据添加到链接的Google表格(工作表名称“ IIR”)时将“事件”号添加到“事件号”列(第1列)中列4中的新数据。第一行包含工作表标题(由表单中的问题开发)。我从其他来源窃取了具有相同意图的脚本,该脚本运行没有错误,但是我没有得到期望的结果(我是Newbee)。

//CORE VARIABLES
// The column you want to check if something is entered.
enter code here var COLUMNTOCHECK = 4; // Where you want the date time stamp offset from the input location. [row, column]
var ADDNUMBER = [1,1]; // Sheet you are working on
var SHEETNAME = "IIR"

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("IIR"); //checks that we're on the correct sheet.
      if( sheet.getSheetName() == SHEETNAME ) { 
          var selectedCell = ss.getActiveCell(); //checks the column to ensure it is on the one we want to cause the number to appear.
          if( selectedCell.getColumn() == COLUMNTOCHECK) { 
              var IncidentNumber = selectedCell.offset(ADDNUMBER[1],ADDNUMBER[1]);
                  for (r=1; r<999; r++) {
                  ss.getRange(r,1).setValue(r);
          }
      }
}}

2 个答案:

答案 0 :(得分:0)

将事件编号附加到链接表中的时间戳记

此功能将添加一个事件编号,该事件编号由时间戳组成,方法是使用两位数的年份,两位数的月份,两位数的日期,破折号和连续的递增数字。它还保留时间戳,并将事件编号添加到单元格的底部。

function formSubmit(e) {
  if(e.values && e.values[1]) {
    Logger.log(JSON.stringify(e));
    var sh=e.range.getSheet();
    sh.getRange(e.range.rowStart,1).setValue(getIncidentNumber(e));
  }
}

function getIncidentNumber(e) {
  var ps=PropertiesService.getScriptProperties();
  var ts=e.values[0];
  var key=Utilities.formatString('%s%s%s',ts.slice(8,10),ts.slice(0,2),ts.slice(3,5));
  if(ps.keys && ps.getKeys().indexOf(key)==-1) {
    ps.setProperty(key,1);
    return key + "-" + 1;
  }else{
    var value=ps.getProperty(key);
    ps.setProperty(key, Number(value) + 1)
    var rv = ts + '\n' + key + "-" + Number(value).toFixed();
    return rv;
  }
}

答案 1 :(得分:0)

如果要从工作表中获取Incident number,则应从表格中打开脚本编辑器。这样,脚本将被绑定到实际的表单。

然后,您应该使用以下脚本:

var DESTINATION_SS_ID = "YOUR_DESTINATION_SHEET_ID";

function onFormSubmit(e) {

  var incidentNumber = e.response.getItemResponses()[2].getResponse();
  var ss = SpreadsheetApp.openById(DESTINATION_SS_ID);
  ss.appendRow([incidentNumber]);

}

该脚本使用的是installable trigger,而不是像您那样遍历表单中的有界工作表,而是直接从表单中获取响应,并将其添加到所需的表单中电子表格。这是通过使用onFormSubmit可安装触发器来完成的。

要安装触发器,请按照以下步骤操作:

  • 通过单击此图标转到项目的触发器:

enter image description here

  • 使用以下设置创建新触发器:

enter image description here

  • 保存项目。

要使触发器起作用,您/其他用户只需通过表单发送回复。通过使用.getItemResponses()方法和之后的.getResponse()方法获得结果,从本质上来说,该方法可以使您获得您/其他用户已发送的响应。然后,使用.appendRow()方法将这些响应添加到工作表中;因此,每次在表单中提交新条目时,Incident number都会自动添加到您的电子表格中。

此外,我建议您看一下这些链接,因为它们可能对您的未来发展有所帮助:

  1. Installable Triggers;

  2. Event objects - Form submit;

  3. FormResponse Class;

  4. ItemResponse Class;

  5. Sheet Class - appendRow()