我有一个名为“提交”的文件夹的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;">
这样做是创建一个包含“姓名”,“电子邮件”,“演示标题”文本字段以及“提交”按钮的表单。用户附加文件并使用此表单上传文件。
现在文件上传工作正常。任何人都可以上传文件,它将正确显示在我的谷歌驱动器上的文件夹(提交)中...但是,其他细节只是消失,好像它们从未进入过。我希望这些细节出现在现有的电子表格中,最好带有时间戳。
任何人都可以帮助我吗?
答案 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 Spreadsheet,Uploading file using Google Apps Script using HtmlService