GAS 除錯

在 Code.gs 進行除錯

在後端環境除錯相對直覺。你可以直接在程式碼左側點擊行號設置斷點。點擊上方工具列的「偵錯」按鈕後,程式會執行到斷點處停止。這時你可以查看右側面板的變數狀態。

如果不想中斷執行,最常用的方法是使用 Logger.log()console.log()。這兩種方法都會把訊息紀錄在下方的執行日誌中。執行完畢後,點擊左側導覽列的「執行項目」,就能看到所有過往的 Log 紀錄與報錯資訊。

在 index.html 進行除錯

前端的 HTML 檔案無法直接在 GAS 編輯器裡除錯。你需要透過瀏覽器的開發者工具。在部署或預覽網頁後,對著網頁點擊右鍵選擇「檢查」。在「Console」分頁中,你可以看到 JavaScript 的報錯。

如果你在 HTML 的 <script> 標籤中寫了程式碼,可以在代碼中加入 debugger; 指令。當瀏覽器開發者工具開啟時,執行到這行會自動暫停,讓你檢查前端變數。如果是透過 google.script.run 呼叫後端失敗,記得在前端加上 withFailureHandler 來捕捉錯誤訊息並印在 Console。


帶有錯誤處理的 google.script.run 範例碼

後端 Code.gs 的實作

在後端處理資料時,最怕不知道變數傳到了哪裡。你可以利用 try...catch 語法包住代碼。這樣當程式出錯時,就不會直接當掉,而是能回傳清楚的錯誤訊息。

function processData(input) {
  try {
    // 這裡放主要的邏輯
    return "處理成功";
  } catch (e) {
    Logger.log("出錯了:" + e.message);
    throw new Error("後端失敗:" + e.message);
  }
}

這段程式碼會把詳細的錯誤記錄在 GAS 的執行日誌裡。對前端來說,它會收到一個明確的報錯對象。

前端 index.html 的串接

在 HTML 頁面,我們利用 google.script.run 呼叫後端。關鍵是要接上 withFailureHandler。這個函數會捕捉後端丟出來的任何錯誤。

function callServer() {
  google.script.run
    .withSuccessHandler(function(res) {
      console.log("成功拿回資料:", res);
    })
    .withFailureHandler(function(err) {
      console.error("呼叫發生錯誤:", err.message);
    })
    .processData("測試資料");
}

當你點擊執行後,打開瀏覽器的檢查工具(F12)。如果出錯了,紅色的錯誤字樣會出現在 Console 頁面。這讓你一眼就能看出問題是出在前端的變數傳遞,還是後端的邏輯錯誤。


具備自動儲存功能的完整範例

後端 Code.gs 的儲存邏輯

後端主要負責把資料寫入試算表。我們會先檢查輸入是否為空。如果寫入過程發生問題,catch 區塊會捕捉錯誤並把詳細訊息丟回前端。這能避免前端一直處於等待狀態。

JavaScript

function saveToSheet(data) {
  try {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("工作表1");
    sheet.appendRow([new Date(), data]);
    return "儲存成功";
  } catch (e) {
    throw new Error("試算表寫入失敗:" + e.toString());
  }
}

這段程式碼會回傳一個字串給前端。如果你的工作表名稱寫錯,它就會觸發錯誤。

前端 index.html 的自動機制

前端我們可以使用 setInterval 來達成自動儲存。每隔一段時間就抓取輸入框的內容傳給後端。我們在 Console 印出狀態,方便你追蹤每次存檔的時間點。

HTML

<input type="text" id="userInput" placeholder="輸入內容會自動存檔">
<p id="status"></p>

<script>
  // 每 10 秒自動執行一次
  setInterval(function() {
    var val = document.getElementById("userInput").value;
    if (!val) return;

    document.getElementById("status").innerText = "儲存中...";

    google.script.run
      .withSuccessHandler(function(msg) {
        document.getElementById("status").innerText = msg;
        console.log("自動存檔紀錄:" + new Date().toLocaleTimeString());
      })
      .withFailureHandler(function(err) {
        document.getElementById("status").innerText = "存檔失敗";
        console.error("錯誤細節:", err);
      })
      .saveToSheet(val);
  }, 10000);
</script>

這樣你只要開著網頁輸入,後台就會自動運作。出問題時,直接看瀏覽器 Console 就能知道是哪次請求斷掉了。


如何把這個網頁正式部署成網頁應用程式

部署網頁應用程式的步驟

要讓別人看到你的網頁,必須進行部署。點擊編輯器右上角的「部署」按鈕,選擇「新增部署」。在選取類型的地方,點擊齒輪圖示並選擇「網頁應用程式」。

在設定頁面,將「執行身分」設定為「我」,並將「誰可以存取」設定為「任何人」。這步很重要,如果沒有設定為任何人,外部使用者或未登入 Google 的人會無法開啟網頁。點擊部署後,你會得到一段網址。

程式碼的基本要求

為了讓網頁能順利顯示,你的 Code.gs 必須包含一個名為 doGet 的函式。這是 Google 指定的進入點。

function doGet() {
  return HtmlService.createHtmlOutputFromFile('index')
      .setTitle('我的自動存檔網頁')
      .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}

這段代碼會讀取你的 index.html 並把它渲染成網頁。加上 setXFrameOptionsMode 可以避免網頁在某些環境下被阻擋顯示。

更新網頁內容

如果你修改了程式碼,必須重新部署才能看到效果。點擊「管理部署」,點擊鉛筆圖示編輯,然後在版本選單選擇「新版本」。

如果只是為了開發測試,建議使用「測試部署」。測試部署提供的網址會即時反映你最新的程式碼變動,不需要每次都重新發布新版本。這在除錯階段非常方便。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *