亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Google Script - 表單:以編程方式處理上傳字段:如何獲取多個鏈接?

Google Script - 表單:以編程方式處理上傳字段:如何獲取多個鏈接?

料青山看我應如是 2023-05-11 14:08:25
在谷歌腳本中使用上傳字段時,我遇到了兩個問題。我會盡力描述我的問題。我有一個表單,在發送時設置了觸發器。此觸發器調用一個主函數,而主函數又調用其他一些函數。其中一個子功能創建一個文檔,然后在特定工作表上設置其鏈接。主函數在以下行中獲取項目響應對象:var responses = e.response.getItemResponses();然后,此對象作為參數傳遞給 Doc 函數:generateBriefingPDF(classID, briefingSheet, responses, timestamp);ClassID 是一個簡單的整數屬性,briefingSheet 是我從中獲取的目標工作表和時間戳:var timestamp = e.response.getTimestamp();在 generateBriefingPDF 腳本中,我得到響應并將它們分配給更易于閱讀的變量,如下所示:var name = responses[0].getResponse();var subject = responses[1].getResponse();var content = responses[2].getResponse();var level = responses[3].getResponse();var uploads = responses[4].getResponse();然后,我在用帶有變量的模板復制的新文檔中替換文本“變量” 。我也將它們設置在工作表中?!吧蟼鳌眝ar 是文件的 ID,因此我使用以下方法將其轉換為鏈接:uploads = DriveApp.getFileById(uploads).getUrl();這很好用。除了 response[4] 中的“uploads”變量外,它是一個上傳字段。發生以下情況:當什么都沒有上傳時:變量是undefined,所以它不能運行屬性“getResponse”。TypeError: Cannot read property 'getResponse' of undefined我在 Stackdriver 日志中收到錯誤。我試圖用以下幾行檢查是否未定義,但都沒有用:if(uploads !== undefined) if(typeof uploads !== "undefined")上傳一個文件:一切正常。上傳了多個文件:我在嘗試通過 ID 獲取文件時出錯(當然):Exception: Unexpected error while getting the method or property getFileById on object DriveApp. 當我沒有將 ID 轉換為鏈接的行時,ID 在doc 文件,但只有第一個出現在工作表中。我能做些什么來解決這兩個問題?
查看完整描述

1 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

我相信你的目標如下。

  • 您想針對使用 Google 表單上傳一個文件和/或多個文件的情況修改您的腳本。

修改點:

根據您的腳本,我認為您的腳本可能是 Google Form 的容器綁定腳本。從 中More than one file is uploaded,我認為uploadsofvar uploads = responses[4].getResponse()是一個包含上傳文件的文件 ID 的數組。在這種情況下,responses[4]每種情況如下。

  • 當文件未上傳時,responses[4]undefined.

    • 這在你的問題中已經提到了。

  • 當一個文件和/或多個文件上傳時,responses[4]是ItemResponse的對象,responses[4].getResponse()是一個包含上傳文件的文件ID的數組。

    • 上傳一個文件時,var uploads = responses[4].getResponse()就像["###fileId###"]. 在這種情況下,DriveApp.getFileById(uploads)有效。我認為這uploads.toString()可能用于這種情況。但是,當上傳多個文件時,文件 ID 不存在。由此,錯誤發生。

    • 關于 中的問題More than one file is uploaded,我認為這是您問題的原因。

我認為為了實現你的目標,可以使用上述情況。當你的腳本修改后,就變成了下面這樣。

修改腳本:

從:

var uploads = responses[4].getResponse();

到:

var uploads = "";

if (responses[4]) {  // or if(uploads !== undefined) if(typeof uploads !== "undefined")

  uploads = responses[4].getResponse().map(id => DriveApp.getFileById(id).getUrl()).join(",");

}

筆記:

在這個修改中,當一個文件被上傳時,uploads就是一個URL。例如,當上傳 2 個文件時,uploads是一個包含 2 個 URL 的字符串值,例如URL1,URL2. 如果想作為數組使用,請修改為uploads = responses[4].getResponse().map(id => DriveApp.getFileById(id).getUrl()).

當沒有文件上傳時,uploads是"".


查看完整回答
反對 回復 2023-05-11
  • 1 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號