繁体   English   中英

使用 Google 应用脚本在 Google 表格中上传 PDF 文件

[英]Upload PDF file in Google sheet using Google apps script

我正在尝试将 pdf 文件上传到谷歌表格中的单个单元格,就像我们在谷歌表格单元格中插入图像一样。 我已经搜索了很长一段时间,但还没有找到任何解决方案。 我尝试了以下代码:

function onOpen(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var menuEntries = [];
  menuEntries.push({name: "File...", functionName: "doGet"});
  ss.addMenu("Attach ...", menuEntries);
}

function doGet(e) {
  var app = UiApp.createApplication().setTitle("upload attachment into Google Drive");
  SpreadsheetApp.getActiveSpreadsheet().show(app);
  var form = app.createFormPanel().setId('frm').setEncoding('multipart/form-data');
  var formContent = app.createVerticalPanel();
  form.add(formContent);  
  formContent.add(app.createFileUpload().setName('thefile'));

  formContent.add(app.createHidden("activeCell", SpreadsheetApp.getActiveRange().getA1Notation()));
  formContent.add(app.createHidden("activeSheet", SpreadsheetApp.getActiveSheet().getName()));
  formContent.add(app.createHidden("activeSpreadsheet", SpreadsheetApp.getActiveSpreadsheet().getId()));
  formContent.add(app.createSubmitButton('Submit'));
  app.add(form);
  SpreadsheetApp.getActiveSpreadsheet().show(app);
  return app;
}

function doPost(e) {
  var app = UiApp.getActiveApplication();
  app.createLabel('saving...');
  var fileBlob = e.parameter.thefile;
  var doc = DriveApp.getFolderById('0B0uw1JCogWHuc29FWFJMWmc3Z1k').createFile(fileBlob);
  var label = app.createLabel('file uploaded successfully');


  var value = 'hyperlink("' + doc.getUrl() + '";"' + doc.getName() + '")'
  var activeSpreadsheet = e.parameter.activeSpreadsheet;
  var activeSheet = e.parameter.activeSheet;
  var activeCell = e.parameter.activeCell;
  var label = app.createLabel('file uploaded successfully');
  app.add(label);
  SpreadsheetApp.openById(activeSpreadsheet).getSheetByName(activeSheet).getRange(activeCell).setFormula(value);
  app.close();
  return app;
}

由于 UiApp 已被弃用,因此它显示错误“UiApp 已被弃用。请改用 HtmlService”。 我尝试了以下行来避免 UiApp 错误但没有用:

var app = HtmlService.createHtmlOutput();

是否有任何解决方法可以避免此错误? 谢谢你。

我相信你的目标如下。

  • 从您的以下评论中,

    我在本地电脑中有 pdf 文件,我将有一个带有“文件上传”选项的谷歌表格插件。 我会点击它,它会将文件上传到我们在脚本中指定的 Drive 文件夹中,并且活动的谷歌工作表单元格将显示确认消息。

    我想将消息放在工作表的当前活动单元格中

  • 您想将本地 PC 上的 PDF 文件上传到 Google Drive。 并且您想将确认消息放到当前活动的单元格中。 您想通过使用 HTML 和 Google Apps 脚本的侧边栏来实现此目的。

在这种情况下,下面的示例脚本怎么样?

示例脚本:

Google Apps 脚本端: Code.gs

请将以下脚本作为脚本文件复制并粘贴到 Google 电子表格的脚本编辑器中并保存。

const openSidebar = _ => SpreadsheetApp.getUi().showSidebar(HtmlService.createHtmlOutputFromFile("index"));

function upload(e){
  const message = "sample confirmation message"; // Please set your confirmation message.

  DriveApp.createFile(Utilities.newBlob(...e));
  SpreadsheetApp.getActiveRange().setValue(message);
}

HTML&Javascript 端: index.html

请将以下脚本作为 HTML 文件复制并粘贴到 Google 电子表格的脚本编辑器中并保存脚本。

<form>
  <input type="file" name="file" onchange="upload(this.parentNode)" accept=".pdf,application/pdf" />
</form>
<script>
function upload(e){
  const file = e.file.files[0];
  const fr = new FileReader();
  fr.onload = e => google.script.run.upload([[...new Int8Array(e.target.result)], file.type, file.name]);
  fr.readAsArrayBuffer(file);
}
</script>

测试:

当您运行 function openSidebar时,侧边栏将打开。 并且当您 select 输入标签中的文件时,该文件将上传到 Google Drive 的根文件夹,并将确认消息放入活动单元格。

笔记:

  • 在此方法中,由于 Google Apps 脚本端的规范,最大文件大小为 50 MB。 请注意这一点。

  • 这是一个简单的示例脚本,用于实现您的问题目标。 所以请根据您的实际情况进行修改。

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM