疑難排解

即使是經驗最豐富的開發人員也很少在第一時間正確編寫程式碼 嘗試,讓疑難排解是開發程序的重要一環。於 本節將介紹一些技巧,可幫助你尋找、瞭解和 偵錯指令碼中的錯誤。

錯誤訊息

當指令碼發生錯誤時,系統會顯示錯誤訊息。訊息 附有疑難排解的行號。有兩種基本方法 這類錯誤的顯示方式包括:語法錯誤執行階段錯誤

語法錯誤

語法錯誤是因為撰寫的程式碼不符合 JavaScript 文法而產生,系統會在您嘗試儲存指令碼時偵測到這些錯誤。舉例來說,下列程式碼片段包含語法錯誤:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ";
  MailApp.sendEmail('john@example.com',
                    'Data in row ' + rowNumber,
                    rowData);
}

這裡的語法問題在第四個結尾缺少 ) 字元 互動儲存指令碼時,您會收到以下錯誤訊息:

引數清單之後遺漏 )。(第 4 行)

這些類型的錯誤通常很容易進行疑難排解,因為它們可以找出 通常只會呈現簡單原因你無法儲存 檔案,只儲存有效的程式碼。 。

執行階段錯誤

這些錯誤是由函式或類別使用不正確所造成,且 指令碼執行後即可偵測。例如,下列程式碼 會導致執行階段錯誤:

function emailDataRow(rowNumber) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var data = sheet.getDataRange().getValues();
  var rowData = data[rowNumber-1].join(" ");
  MailApp.sendEmail('john',
                    'Data in row ' + rowNumber,
                    rowData);
}

程式碼格式正確,但我們傳送的值為「john」的 電子郵件地址,MailApp.sendEmail。由於這不是有效的電子郵件地址,因此在執行指令碼時會擲回以下錯誤:

電子郵件地址無效:john (第 5 行)

導致這些錯誤更難以疑難排解 您傳入函式不會寫入程式碼中,而是提取 從試算表、表單或其他外部資料來源擷取使用偵錯功能 以下技巧可協助您找出錯誤發生的原因。

常見錯誤

以下列出常見錯誤及其原因。

服務叫用次數過多:<action name>

這則錯誤訊息指出你已超過特定動作的每日配額。 舉例來說,如果您在一天內傳送的電子郵件過多,就可能會遇到這個錯誤。配額上限適用於消費者、網域和 Premium 帳戶,且隨時可能變更, 公告。您可以在 Apps Script 配額說明文件中查看各種動作的配額限制。

伺服器無法使用。伺服器發生錯誤,請再試一次。

以下幾個原因可能會導致這類錯誤:

  • Google 伺服器或系統暫時無法使用。請稍候片刻,然後再嘗試執行指令碼。
  • 指令碼中的錯誤沒有相應的錯誤 撰寫新的電子郵件訊息請嘗試對指令碼進行偵錯,看看是否能找出問題。
  • Google Apps Script 中有一項錯誤導致這個錯誤。適用對象 如要瞭解如何搜尋及提交錯誤報告,請參閱 錯誤。提交新錯誤前,請先搜尋 ,看看是否已有其他人檢舉此內容。

需要授權才能執行該動作。

這項錯誤表示指令碼缺少執行所需的授權。 如果指令碼是透過指令碼編輯器或自訂選單項目執行, 驗證對話方塊。不過,在執行指令碼時 透過觸發條件、嵌入 Google 協作平台頁面或以服務形式執行, 對話方塊,且未顯示這則錯誤訊息。

如要授權指令碼,請開啟「指令碼編輯器」並執行任一函式。 畫面中會出現授權提示,方便您授權指令碼專案。如果 指令碼包含新的未經授權服務,你必須重新授權指令碼。

這類錯誤通常是因為觸發事件在使用者授權前就觸發。如果您無法存取指令碼專案 (因為您的外掛程式正在發生錯誤) 例如,您通常可以使用外掛程式 可以選取「重新建立」,再次生成新的提示如果觸發條件持續觸發並導致這項錯誤,您可以按照下列步驟移除觸發條件:

  1. 按一下 Apps Script 專案左側的「觸發條件」圖示
  2. 在要移除的觸發條件右側,依序按一下「更多」圖示 >「刪除觸發條件」

您也可以前往 解除安裝外掛程式

存取遭拒:雲端硬碟應用程式網域政策已停用第三方雲端硬碟應用程式

「 Google Workspace 」網域管理員可以擁有 可讓您停用 使用者所屬網域的 Drive API,導致使用者無法 安裝及使用 Google 雲端硬碟應用程式。這項設定也會防止使用者使用使用 雲端硬碟服務進階雲端硬碟服務的 Apps Script 外掛程式 (即使管理員在停用雲端硬碟 API 前已授權給指令碼,也一樣)。

不過,如果是使用雲端硬碟服務的外掛程式或網頁應用程式 全網域安裝 且由管理員為網域中的部分或所有使用者安裝 這些使用者的指令碼功能,即使 Drive API 已停用 網域。

指令碼沒有取得活躍使用者識別資訊的權限。

表示活躍使用者的身分和電子郵件地址不會 指令碼這則警告是由呼叫 Session.getActiveUser()。 也可能是使用者呼叫 Session.getEffectiveUser()敬上 表示指令碼是在授權模式下執行 AuthMode.FULL。 如果系統顯示這則警告,後續的 User.getEmail() 只會傳回「」。

您可以根據問題的類型,透過多種方式排解這則警告 執行指令碼的授權模式。授權模式為 在觸發的函式中顯示為 eauthMode 屬性 事件參數

缺少程式庫

如果在指令碼中加入熱門資料庫, 您可能會收到 指出缺少此程式庫,即使程式庫列為 即可。這可能是因為有太多人在存取程式庫 相同的軟體。如要避免發生這個錯誤,請嘗試下列任一解決方案:

  • 複製並貼入程式庫的程式碼至指令碼中,然後移除程式庫依附元件。
  • 複製程式庫指令碼,並從帳戶中部署為程式庫。請務必 將原始指令碼中的依附元件更新為新程式庫 而不是公開的 IP 位址

缺少程式庫版本或部署作業版本,因此發生錯誤。錯誤代碼 Not_Found

這則錯誤訊息表示發生下列其中一種情況:

  • 已刪除已部署的指令碼版本。更新已部署的 請參閱編輯版本編號 部署作業
  • 指令碼使用的程式庫版本已刪除。如要檢查缺少哪個程式庫,請依序點選程式庫名稱旁邊的 「更多」>「在新分頁中開啟」。缺少的圖書館 系統會顯示錯誤訊息。找到需要更新的資料庫後,請 下列其中一項動作:
    • 請更新程式庫以使用其他版本。請參閱更新 程式庫
    • 將已刪除的程式庫從指令碼專案和程式碼中移除。請參閱移除媒體庫
  • 指令碼使用的程式庫指令碼包含另一個使用已刪除版本的程式庫。執行下列其中一項操作:
    • 如果你具有指令碼所用程式庫的編輯權限,請更新 複製到現有版本的次要程式庫
    • 請更新程式庫以使用其他版本。請參閱「更新程式庫」。
    • 將程式庫從指令碼專案和程式碼中移除。請參閱移除媒體庫

Error 400:使用進階服務呼叫 Google Chat API 時,出現 invalid_scope 錯誤

如果遇到 Error 400: invalid_scope 錯誤訊息 Some requested scopes cannot be shown, 就表示您尚未在 Apps Script 專案的 appsscript.json 檔案。大多數情況下 Apps Script 會自動判斷指令碼需要的範圍, 不過使用 Chat 進階服務時,您必須手動 指令碼使用的授權範圍 Apps Script 專案的資訊清單檔案。詳情請見 設定明確範圍

如要解決這項錯誤,請新增適當的授權範圍 複製到 Apps Script 專案的 appsscript.json 檔案,在 oauthScopes 陣列。舉例來說,如要呼叫 spaces.messages.create 方法,請新增下列內容:

"oauthScopes": [
  "https://www.googleapis.com/auth/chat.messages.create"
]

<URL> 的 UrlFetch 呼叫未獲得管理員許可

Google Workspace 管理員可以在管理控制台中啟用許可清單 控管可存取哪些外部網域 Apps Script。

如要解決這項錯誤,請與管理員聯絡,要求對方新增網址 加入許可清單。

偵錯

並非所有錯誤都會顯示錯誤訊息。可能會有 出現細微錯誤,也就是程式碼在技術上正確且可以執行,但 無法達到預期的結果針對這類問題,以下提供一些策略 進一步調查與預期不符的指令碼

記錄

在偵錯時,通常會在指令碼專案執行時記錄資訊。Google Apps Script 有兩種記錄資訊的方法:雲端記錄服務和較基本且內建於 Apps Script 編輯器的記錄器和控制台服務

詳情請參閱記錄指南

Error Reporting

系統會自動處理因執行階段錯誤而發生的例外狀況 是使用 Google Cloud Error Reporting 服務記錄的這項服務可讓您 搜尋並篩選指令碼專案建立的例外狀況訊息。

如要存取 Error Reporting,請參閱這篇文章中的 Cloud 記錄檔和錯誤報告: Google Cloud Platform 控制台

執行作業

每次執行指令碼時,Apps Script 都會記錄執行。 包括 Cloud 記錄檔您可以參考這些紀錄 以及指令碼執行的動作

如要查看 Apps 指令碼專案中的指令碼執行作業,請按一下左側的「執行作業」圖示

正在檢查 Apps Script 服務狀態

雖然極少見,或有時特別使用特定 Google Workspace 服務 (例如 Gmail 或雲端硬碟) 遇到可能導致服務中斷的暫時性問題。發生這種情況時,與這些服務互動的 Apps Script 專案可能無法正常運作。

你可以查看是否有 Google Workspace 服務 也可以查看 Google Workspace 狀態資訊主頁。 如果服務中斷 請等待問題解決或尋求解決 請參閱 Google Workspace 說明中心Google Workspace 已知問題 說明文件。

使用偵錯工具和中斷點

如要找出指令碼中的問題,可以在偵錯模式中執行。執行期間 偵錯模式,指令碼只要碰到中斷點 (也就是 工具中標明瞭可能有問題。指令碼 會暫停顯示 方便您查看該時間點內每個變數的值 執行指令碼的內部工作,而不必新增大量記錄陳述式。

新增中斷點

如要新增中斷點,請將遊標懸停在要新增中斷點的行號上。 輸入中斷點按一下行號左側的圓圈。下方 圖片顯示已在指令碼中加入中斷點的範例:

新增中斷點

以偵錯模式執行指令碼

如要在偵錯模式中執行指令碼,請按一下編輯器頂端的「Debug」

在指令碼執行之前,系統會暫停中斷點的中斷點,並顯示 表格。您可以使用這個表格檢查資料,例如參數的值和物件中儲存的資訊。

如要控制指令碼的執行方式,請在「Debugger」面板頂端 使用「步行」、「跳過」和「離開」按鈕。可讓您執行 編寫指令碼,每次執行一個指令碼,並檢查值在一段時間內的變化情形。

同時登入多個 Google 帳戶的相關問題

如果您同時登入多個 Google 帳戶, 無法順利存取外掛程式和網頁應用程式 Apps Script、外掛程式或網頁應用程式不支援多重登入功能,因此無法在同時登入多個 Google 帳戶的情況下使用。

  • 如果您在登入多個帳戶的情況下開啟 Apps Script 編輯器, Google 提示 請選擇要使用的帳戶

  • 如果您開啟網頁應用程式或外掛程式,但發生多重登入問題,請嘗試下列其中一種解決方法:

    • 登出所有 Google 帳戶,並且只登入具有 外掛程式或網頁應用程式。
    • 在 Google Chrome 中開啟無痕式視窗,或同等的私密瀏覽模式 視窗,然後登入已安裝外掛程式或網頁應用程式的 Google 帳戶 想要存取的物件

取得說明

使用上述的工具和技術對問題進行偵錯,即可解決 但您可能會遇到一些問題 需要額外協助才能解決如要瞭解可在何處發問問題及回報錯誤,請參閱支援頁面