使用Google App Script创建电子表格以及文件上传

时间:2014-10-01 01:02:06

标签: google-apps-script google-sheets google-spreadsheet-api

我很难找到设置此类内容的基本示例。我正在整理文档,但基本功能根本不起作用。真的可以使用一些建议。

我有文件上传工作感谢另一个教程,但我想创建一个电子表格(或只是打开电子表格,如果它已经存在)来存储其他信息,如上传者的名称,一个URL文件等没有骰子!

SERVER.GS:

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

function uploadFiles(form) {

  try {

var ss = SpreadsheetApp.create("TEST123");
var sheet = ss.getSheets()[0];

 // Appends a new row with 2 columns to the bottom of the
 // spreadsheet containing the values in the array
 sheet.appendRow(["Jackson Jones", "jJones@email.com"]);


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

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

    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">
<input type="text" name="myName" placeholder="Your full name...">
<input type="file" name="myFile">
<input type="submit" value="Upload File" 
       onclick="this.value='Uploading..';
                google.script.run.withSuccessHandler(fileUploaded)
                .uploadFiles(this.parentNode);
                return false;">


</form>

<div id="output"></div>

<script>
    function fileUploaded(status) {
        document.getElementById('myForm').style.display = 'none';
        document.getElementById('output').innerHTML = status;
    }
</script>

<style>
 input { display:block; margin: 20px; }
</style>

当然最终我会使用form.myName等来填充电子表格,但我甚至无法让他们的示例代码运行。

2 个答案:

答案 0 :(得分:2)

您的表单语法看起来有些问题。这是一个将完成您所需要的版本 - 代码教程的修改版本提供了Apps Script HTMLService documentation

注意我使用ID来识别drop文件夹和日志电子表格以方便使用(请注意,Drive中可以有多个文件/文件夹具有相同的名称,因此使用ID通常比按名称查找文件更合适。) / p>

<强> Code.gs

var dropBoxId = "012345679abcdefg"; // Drive ID of 'dropbox' folder
var logSheetId = "abcdefghijklmnopqrstu123"; // Drive ID of log spreadsheet

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

function uploadFiles(formObject) {
  try {
    // Create a file in Drive from the one provided in the form
    var folder = DriveApp.getFolderById(dropBoxId);
    var blob = formObject.myFile;    
    var file = folder.createFile(blob);    
    file.setDescription("Uploaded by " + formObject.myName);

    // Open the log and record the new file name, URL and name from form
    var ss = SpreadsheetApp.openById(logSheetId);
    var sheet = ss.getSheets()[0];
    sheet.appendRow([file.getName(), file.getUrl(), formObject.myName]);

    // Return the new file Drive URL so it can be put in the web app output
    return file.getUrl();
  } catch (error) {
    return error.toString();
  }
}

<强> InputForm.html

<form id="myForm">
  <input type="text" name="myName" placeholder="Your full name..."/>
  <input name="myFile" type="file" />
  <input type="button" value="Submit"
      onclick="google.script.run
          .withSuccessHandler(updateUrl)
          .withFailureHandler(onFailure)
          .uploadFiles(this.parentNode)" />
</form>

<div id="output"></div>

<script>
    function updateUrl(url) {
        var div = document.getElementById('output');
        div.innerHTML = '<a href="' + url + '">Got it!</a>';
    }
    function onFailure(error) {
        alert(error.message);
    }
</script>

<style>
  input { display:block; margin: 20px; }
</style>

答案 1 :(得分:0)

对Ryan Roth的剧本的建议: 1.&#34; 时间戳&#34;当某人填写表单时,不会创建列。 2.&#34; 必需&#34;字段属性不起作用。 3.上传的文件应通过上传者名称创建的文件夹提交到Google云端硬盘。 4.提交表单后,字段不会刷新,保持输入的数据不变。 5.独立应用程序在网站中不是可嵌入。 如果有人有更新的脚本,请在下面分享。