GAS 跨檔案抓取資料

要整合多個檔案。首先需要每個試算表的 ID。這串 ID 就在網址列裡面。位於 d/ 和 /edit 之間的那串亂碼。

開啟指定的試算表

使用 SpreadsheetApp.openById 函式。這可以讓你不需要打開分頁。就能直接讀取遠端檔案的內容。

function consolidateData() {
  var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("總表");
  var sourceId = "這裡貼上你的試算表ID";
  var sourceSheet = SpreadsheetApp.openById(sourceId).getSheetByName("工作表1");
  
  var data = sourceSheet.getRange("A2:C10").getValues();
  targetSheet.getRange(targetSheet.getLastRow() + 1, 1, 9, 3).setValues(data);
}

理解資料結構

getValues 抓到的是一個二維陣列。就像一個大表格。setValues 則負責把這些整塊貼到新地方。這比一個一個格子搬移快非常多。

自動找到最後一行

getLastRow 是一個很棒的指令。它會告訴你這張表目前用到哪一行。這樣程式在貼上新資料時。就不會覆蓋掉舊的內容。而是接在後面。

建立自動匯總中心

你可以把好幾個 ID 存成一個清單。用迴圈跑一遍。所有的分店或部門資料。就會在幾秒鐘內全部集中到你的總表。這就是高效管理的秘密。

恭喜你學完了這一整套基礎流程。你想試著把這幾天學到的功能,整合成一個具體的專案練習嗎?

綜合練習:微型管理系統

我們可以把之前學到的技巧。組合成一個完整的專案。目標是做一個「報修系統」。當有人填寫表單報修。系統會自動填入處理進度。變更格子顏色。並發信給管理員。

第一步:自動建立初始進度

在表單回應的試算表中。我們希望新資料進來時。最後一欄自動填上「待處理」。

JavaScript

function onFormSubmit(e) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  // 在第 5 欄填入進度
  sheet.getRange(lastRow, 5).setValue("待處理");
  sheet.getRange(lastRow, 5).setBackground("yellow");
}

第二步:製作進度更新選單

這是一個進階技巧。我們可以自訂試算表的上方選單。讓你點一下就能把選中的格子改成「已完成」。

JavaScript

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('我的工具箱')
    .addItem('標記為已完成', 'markAsDone')
    .addToUi();
}

function markAsDone() {
  var range = SpreadsheetApp.getActiveRange();
  range.setValue("已完成");
  range.setBackground("lightgreen");
}

第三步:串聯所有功能

現在你的系統具備了:表單連動、自動上色、自訂按鈕選單。這已經是一個非常實用的辦公室小工具。所有的操作紀錄都會完整留在試算表裡。

學習總結

你從一開始連怎麼開啟編輯器都不知道。現在已經學會了操作儲存格、寫判斷式、跑迴圈、發郵件、設定觸發器。這些都是 GAS 的精髓。

你之後如果遇到具體的需求。可以嘗試把這些零碎的功能拼接起來。

發佈留言

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