疑難排解

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

錯誤訊息

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

語法錯誤

語法錯誤的起因是撰寫不符合 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. 在要移除的觸發條件右側,按一下「更多」圖示 &gt;刪除觸發條件

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

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

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

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

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

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

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

缺少媒體庫

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

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

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

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

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

使用進階服務呼叫 Google Chat API 時產生 Error 400: 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"
]

偵錯

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

記錄

雖然偵錯時,以腳本專案的形式記錄資訊通常會很有幫助 執行作業。Google Apps Script 提供兩種記錄資訊的方法: Cloud Logging 服務 以及較基本的 Logger 和主控台服務 建立 App Script 編輯器。

詳情請參閱 Logging 指南

Error Reporting

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

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

執行作業

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

如要在 按一下左側的「Apps Script 專案」下方的「執行」

正在檢查 Apps Script 服務狀態

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

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

使用偵錯工具和中斷點

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

新增中斷點

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

新增中斷點

在偵錯模式下執行指令碼

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

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

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

多個 Google 帳戶的問題

如果您同時登入多個 Google 帳戶, 無法順利存取外掛程式和網頁應用程式 多重登入功能,或 使用者同時登入多個 Google 帳戶,但 Google Apps 不支援 指令碼、外掛程式或網頁應用程式。

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

  • 如果您在開啟網頁應用程式或外掛程式時遇到多登入問題,請嘗試以下其中一種做法: 下列解決方案:

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

取得說明

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