我正在嘗試將 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();
是否有任何解決方法可以避免此錯誤?謝謝你。
uj5u.com熱心網友回復:
我相信你的目標如下。
從您的以下評論中,
我在本地電腦中有 pdf 檔案,我會有一個帶有“檔案上傳”選項的谷歌表插件。我會點擊它,它會將檔案上傳到我們在腳本中指定的 Drive 檔案夾中,并且活動的 google 表格單元格將顯示確認訊息。
我想將訊息放在作業表的當前活動單元格中
您想將本地 PC 上的 PDF 檔案上傳到 Google Drive。并且您想將確認訊息放到當前活動的單元格中。您想通過使用 HTML 和 Google Apps 腳本的側邊欄來實作這一點。
在這種情況下,以下示例腳本如何?
示例腳本:
Google Apps 腳本方面: Code.gs
請將以下腳本作為腳本檔案復制粘貼到谷歌電子表格的腳本編輯器中并保存。
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>
測驗:
運行該函式時openSidebar,側邊欄會打開。當您從 input 標簽中選擇檔案時,該檔案會上傳到 Google Drive 的根檔案夾,并且確認訊息會被放置到活動單元格中。
筆記:
在此方法中,由于 Google Apps Script 端的規范,最大檔案大小為 50 MB。請注意這一點。
這是一個簡單的示例腳本,用于實作您的問題目標。所以請根據您的實際情況修改它。
參考:
- Google Workspace 檔案中的對話框和邊欄
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/395419.html
標籤:javascript pdf 谷歌应用程序脚本 谷歌表格 上传文件
