将Google Apps脚本表单提交导入现有电子表格

时间:2016-05-23 06:12:47

标签: google-apps-script google-sheets

我有一个名为“提交”的文件夹的Google云端硬盘。 我还有一个Google Apps脚本,它既可以创建“表单”,也可以将最终用户上传的内容(从表单中)存入提交文件夹。

以下是脚本(server.gs)的示例:

 function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('form.html');
}

function uploadFiles(form) {

  try {

    var dropbox = "Submissions";
    var folder, folders = DriveApp.getFoldersByName(dropbox);

    if (folders.hasNext()) {
      folder = folders.next();
    } else {
      folder = DriveApp.createFolder(submissions);
    }

    var blob = form.myFile;    
    var file = folder.createFile(blob);    
    file.setDescription("Uploaded by " + form.myName);

    return "File uploaded successfully " + file.getUrl();

  } catch (error) {

    return error.toString();
  }

}

Form.html如下:

<form id="myForm">

<label>Name:</label>
<input type="text" name="myName">

<label>Email:</label>
<input type="text" name="myEmail">

<label>Demo Title (e.g "Artist - Demo Name"):</label>
<input type="text" name="myTitle">

<label>Choose Demo File:</label>
<input type="file" name="myFile">

<input type="submit" value="Submit" 
           onclick="google.script.run
                    .uploadFiles(this.parentNode);
                    return false;">

这样做是创建一个包含“姓名”,“电子邮件”,“演示标题”文本字段以及“提交”按钮的表单。用户附加文件并使用此表单上传文件。

现在文件上传工作正常。任何人都可以上传文件,它将正确显示在我的谷歌驱动器上的文件夹(提交)中...但是,其他细节只是消失,好像它们从未进入过。我希望这些细节出现在现有的电子表格中,最好带有时间戳。

任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您必须使用Class SpreadsheetApp,通过此课程,您将能够使用SpreadsheetApp.getActiveSpreadsheet()getSheetByName()getRange()getLastRow()和{{ 1}}等等。

以下是此tutorial的示例代码:

getLastColumn()

编辑:

例如,这是您的代码

var doc = SpreadsheetApp.openById(ID);
var sheet = doc.getSheetByName(SHEET_NAME);
// we'll assume header is in row 1 but you can override with header_row in GET/POST data
var headRow = e.parameter.header_row || 1;
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
var nextRow = sheet.getLastRow()+1; // get next row
var row = [];
// loop through the header columns
for (i in headers){
if (headers[i] == "Timestamp"){ // special case if you include a 'Timestamp' column
row.push(new Date());
} else { // else use header name to get data
row.push(e.parameter[headers[i]]);
}
}
// more efficient to set values as [][] array than individually
sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
// return json success results
return ContentService
.createTextOutput(JSON.stringify({"result":"success", "row": nextRow}))
.setMimeType(ContentService.MimeType.JSON);
} catch(e){
// if error return this
return ContentService
.createTextOutput(JSON.stringify({"result":"error", "error": e}))
.setMimeType(ContentService.MimeType.JSON);
} finally { //release lock
lock.releaseLock();
}

(server.gs)

 <form id="myForm">

<label>Name:</label>
<input type="text" name="myName">

<label>Email:</label>
<input type="text" name="myEmail">

<label>Demo Title (e.g "Artist - Demo Name"):</label>
<input type="text" name="myTitle">

<label>Choose Demo File:</label>
<input type="file" name="myFile">

<input type="submit" value="Submit" 
           onclick="google.script.run
                    .uploadFiles(this.parentNode);
                    return false;">

您还可以查看此答案,了解如何实施电子表格应用:Get form input text value to insert in a Google SpreadsheetUploading file using Google Apps Script using HtmlService