使用谷歌应用程序脚本在上传文件的同时创建电子表格



我很难找到设置类似内容的基本示例。我正在翻阅文档,但基本功能根本不起作用。真的需要一些建议。

由于另一个教程,我可以上传文件,但我也想创建一个电子表格(或者简单地打开电子表格,如果它已经存在的话)来存储其他信息,如上传者的名称、文件的URL等。没有骰子!

服务器.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等来填充电子表格,但我甚至无法运行它们的示例代码。

您的表单语法似乎有一些问题。这里有一个版本,它将做你想要做的事情——它是代码教程的修改版本,提供了Apps Script HTMLService文档。

注意:为了方便起见,我使用ID来识别投递文件夹和日志电子表格(注意,Drive中可以有多个文件/文件夹具有相同的名称,因此使用ID通常比按名称查找文件更可取)。

代码.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>

5瑞安·罗斯剧本建议:1.当有人填写表单时,不会创建"时间戳"列。2."必需"字段属性不起作用。3.上传的文件应提交到谷歌驱动器,并使用上传者名称创建文件夹。4.提交表单后,字段不会刷新,保持输入的数据不变。5.独立应用程序在网站中不可嵌入。如果有人有更新的脚本,请在下面分享。

相关内容

最新更新