将Google Apps脚本移动到v8文件上传已从侧边栏停止工作

问题描述 投票:0回答:1

我正在运行一个按预期工作的脚本。但是将脚本移至v8会使脚本无法正常工作。而且我找不到解决方案。

我已经清理了脚本并在旧引擎中对其进行了测试,并且仍然可以运行,但是在v8中仍然无法正常工作。

这是电子表格中的侧边栏,用于将单个文件上传到我的Google驱动器。

这里是HTML文件中的基本内容

<body>
<h1>File Uploader</h1>
<form>
    <input type="file" name="myFile" id="file">
    <br>
    <input class="blue" type="button" id="submitBtn" value="Upload File" onclick="uploadthis(this.parentNode)">

</form>

<input type="button" value="Close" onclick="google.script.host.close()" />

<script>

function uploadthis(fileForm){

google.script.run
.uploadFiles(fileForm)
}



</script>

</body>

这里是简化的gs

function uploadContract() {
  var html = HtmlService.createHtmlOutputFromFile('ContractUpload').setTitle('Kontrakt upload').setWidth(300);
SpreadsheetApp.getUi().showSidebar(html);
}

function uploadFiles(data){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sStamdata = ss.getSheetByName('Stamdata_New');
var contractFolderId = sStamdata.getRange('D60').getValue(); 
var idag = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd");
var title = sStamdata.getRange('D52').getValue();

var file = data.myFile;
var folder = DriveApp.getFolderById(contractFolderId);
var createFile = folder.createFile(file);
createFile.setName(idag+" - KONTRAKT - "+title);

}
google-apps-script google-sheets v8 google-apps-script-web-application
1个回答
0
投票

这个答案怎么样?请认为这只是几个可能的答案之一。

问题和解决方法:

我可以确认您的问题也是如此。在这种情况下,我认为启用V8后,当使用google.script.run将对象发送到Google Apps脚本端时,可能无法解析表单对象。尽管我认为这可能会在将来的更新中进行修改,但作为当前解决方法,我还是建议将上传的文件作为字节数组发送到GAS端。

修改脚本后,将如下所示。

修改的脚本:

HTML&Javascript面:ContractUpload.html

请如下修改uploadthis

function uploadthis(fileForm){
  const file = fileForm.myFile.files[0];
  const fr = new FileReader();
  fr.onload = function(e) {
    const obj = {
      // filename: file.name,  // In your script, the filename is given at GAS side. So I removed this.
      mimeType: file.type,
      bytes: [...new Int8Array(e.target.result)]
    };
    google.script.run.withSuccessHandler((e) => console.log(e)).uploadFiles(obj);
  };
  fr.readAsArrayBuffer(file);
}

Google Apps脚本端:Code.gs

请如下修改uploadFiles

function uploadFiles(data){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sStamdata = ss.getSheetByName('Stamdata_New');
  var contractFolderId = sStamdata.getRange('D60').getValue(); 
  var idag = Utilities.formatDate(new Date(), "GMT+1", "yyyyMMdd");
  var title = sStamdata.getRange('D52').getValue();

  var file = Utilities.newBlob(data.bytes, data.mimeType, idag+" - KONTRAKT - "+title);  // Modified
  var folder = DriveApp.getFolderById(contractFolderId);
  var createFile = folder.createFile(file);
  return createFile.getId();  // Added
}

注意:

  • 在上述修改中,当文件被上传时,文件被转换为字节数组并将其发送到GAS端。然后,从字节数组创建文件。并返回文件ID。您可以在控制台上看到它。

参考:

如果我误解了你的问题,而这不是你想要的方向,我深表歉意。

© www.soinside.com 2019 - 2024. All rights reserved.