Google 試算表:工作表重新命名與 rename() 功能

 


        工作表名稱就像資料專案的路標:清楚,就不迷路;含糊,日後每個公式都在找人。多數人都知道雙擊標籤就能改名,但真正的關鍵在「命名規則」與「批次流程」:如何一次替 30 個分頁加上年月前綴?如何用 Apps Script 把「Sheet1、Sheet2」自動改成「2025-10 進貨、2025-10 銷售」?以及,改名會不會把公式搞壞?透過本文章的學習,希望可以幫助到需要的您。


目錄

{tocify} $title={目錄} 


先分清楚:你要改的是「檔案名稱」還是「工作表(分頁)名稱」

在 Google 試算表的世界裡,至少有兩種「名稱」常被搞混:

試算表檔案名稱(File Name):

    就是 Google Drive 裡看到的那個檔名。

    可以在試算表左上角直接改,或用 Apps Script 的 Spreadsheet.rename(newName) 來改。

    影響:分享連結與檔案本身的名稱,不會影響工作表內部公式。

工作表(分頁)名稱(Sheet Name):

    是畫面底部的分頁標籤(例如「原始資料」「月報」「摘要」)。

    可在 UI 裡改,也可用 Apps Script 的 Sheet.setName(newName) 改。

    影響: 公式、樞紐、圖表引用到該分頁時的表名。大多數內部引用會自動更新,但跨檔案函數(如 IMPORTRANGE)若把工作表名寫死在字串裡,改名後要手動更新。

快速判斷:

        看到 Drive 列表?你在意的是檔案名rename()

        看到底部分頁標籤?你在意的是工作表名setName()


UI 介面:兩種最穩的改名方法

A. 改「試算表檔案名稱」

    1.    開啟試算表 → 左上角檔名(通常是「未命名的試算表」)

    2.    滑鼠點一下檔名 → 輸入新檔名(例如:2025-10 月報_成品)

    3.    按 Enter 完成

小提示:公司內部常見格式如 專案代號_用途_日期,例如 EC-Sales_月報_2025-10,搜尋時更好找。

B. 改「工作表(分頁)名稱」

方法 1:雙擊更名

    1.    在底部分頁列上,雙擊要改的分頁(例如「Sheet1」)

    2.    輸入新名稱(例如「原始資料」)→ Enter

方法 2:右鍵選單

    1.    右鍵點分頁 → 選「重新命名」

    2.    輸入新名稱 → Enter

推薦命名規則(實務好用)

    1.    資料來源_YYYY-MM(例:銷售_2025-10)

    2.    層級_主題_版本(例:01_原始_上游匯入、02_清洗_正規化後、90_輸出_報表)

   3.     報表頁建議加上 報表/圖表/摘要 等語意字眼,便於同事搜尋。


Apps Script:rename() 與 setName() 的正確用法

改「檔案名稱」:Spreadsheet.rename(newName)

function renameSpreadsheetFile() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const newName = `月報_${Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM')}`;
  ss.rename(newName); // 這裡是 rename():針對檔案本身(Drive 內的檔名)
}

什麼時候用? 每月複製範本後,自動把檔名加上當月字樣;或流程產生成品檔時,自動標記日期/版本。

改「工作表名稱」:Sheet.setName(newName)

function renameCurrentSheet() {
  const sheet = SpreadsheetApp.getActiveSheet();
  sheet.setName('原始資料'); // 改的是底部分頁標籤名稱
}

批次改名:把一串舊名 → 新名對照表一次處理

實務上常把舊表名改成標準化名稱(中英混用或大小寫不一致時很有感)。

function batchRenameSheets() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const mapping = {
    'Sheet1': '01_原始_匯入',
    'Sheet2': '02_清洗_正規化',
    'Sheet3': '90_報表_摘要'
  };

  Object.entries(mapping).forEach(([oldName, newName]) => {
    const sh = ss.getSheetByName(oldName);
    if (sh) sh.setName(newName);
  });
}

自動加上年月前綴:以現有名稱為基礎批量套模板

function prefixMonthToAllSheets() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const ym = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM');
  ss.getSheets().forEach((sh) => {
    const current = sh.getName();
    // 已有前綴就跳過,避免越改越長
    if (!current.startsWith(`${ym}_`)) {
      sh.setName(`${ym}_${current}`);
    }
  });
}

正則清洗:把空白、奇怪符號、全形括號轉半形

function sanitizeSheetNames() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  ss.getSheets().forEach((sh) => {
    let name = sh.getName();
    name = name.trim();
    name = name.replace(/\s+/g, '_');      // 連續空白 → 底線
    name = name.replace(/[()]/g, m => ({'(':'(', ')':')'})[m]); // 全形括號 → 半形
    name = name.replace(/[\/\\:*?\[\]]/g, '-'); // 常見問題符號 → 破折號(保險用)
    if (name !== sh.getName()) {
      sh.setName(name);
    }
  });
}

小結:

    檔名用 rename()。

    分頁名用 setName()。

    批次處理時,先定義規則(前綴、語意、清洗),再一次改完。


改名對公式與報表的影響:哪些會自動更新、哪些不會?

會自動更新(大多數表內引用)

    1.    例如 =SUM('原始資料'!B:B);當你把分頁從「原始資料」改成「01_原始_匯入」,公式通常會自動調整為 =SUM('01_原始_匯入'!B:B)。

    2.    圖表與樞紐通常也會跟著更新來源分頁名稱。

不會自動更新(常見坑)

    1.    IMPORTRANGE(spreadsheet_url, "表名!範圍"):引數是字串,如果對方檔案的表名改了,你這邊就得手動改字串。

    2.    Apps Script 以「名稱」抓分頁:像 getSheetByName('原始資料'),改名後就抓不到,需同步更新程式或改成用 工作表 ID(進階做法:透過 Advanced Sheets API 取 sheetId,以 ID 讀寫)。

    3.    手打文字說明/備註:人寫的說明當然不會自動改。

實務建議 : 

    1.    重要跨檔引用,把表名抽成一格設定值(例如在「設定」分頁 A2 寫 01_原始_匯入,公式用 INDIRECT("'"&設定!A2&"'!A1:B10")),日後只改設定。

    2.    需穩定自動化的工作,考慮「用 ID 不用名稱」:例如透過 Sheets API 操作 sheetId。

    3.    大改名前先做一次「相依檢查」:找出使用 IMPORTRANGE 和 INDIRECT 的儲存格,避免爆一片。


常見錯誤與雷點(逐條破解)

重複名稱 :

    Google 試算表不允許同一檔內有兩個相同的分頁名。批次改名時要先檢查是否已存在同名分頁;否則丟錯。

    解法:

        改名前建立「新名集合」,若撞名就加後綴(例如 _2),或先暫時加前綴 tmp_,全部改完再第二輪去掉 tmp_。

非法或不建議的字元 :

    雖然 Google Sheets 比 Excel 寬鬆,但建議避開 / \ : * ? [ ] 這類字元(網址、匯出 CSV、與他系統串接時容易出事)。

    解法:改名前做正則清洗(前文程式碼可直接用)。

名稱太長、太花 :

    超長名稱在底部分頁看不到重點,手機版更辛苦。

    解法:

        規範 10~25 字內,關鍵在前(01_原始_2025-10),多餘資訊移到備註區或頁首。

改名後跨檔連動失效(IMPORTRANGE):

    因為字串不會自動更新。

    解法:

        集中設定表名,或用 Apps Script 定期檢查來源檔的表名,異動即寄信或寫入提醒區。

Apps Script 找不到分頁 :

    getSheetByName('舊名') 失效。

    解法:

        方案 A:把工作表名稱集中在一個 CONFIG 表,程式都讀那裡。

        方案 B(進階):改用 sheetId 操作,名稱只是顯示文字。

中文全半形與空白陷阱 :

    原始資料 vs 原始資料 (末尾多一格)實務上常見。

    解法:

        清洗時 .trim()、把連續空白轉底線、全形括號轉半形。

樞紐與命名範圍 :

    大多會隨分頁名更新,但若你用大量「命名範圍」指到特定分頁,改名前後記得抽查。

    解法:

        開一張「檢查清單」表,列出所有命名範圍與來源分頁,改名後勾一遍。


問題集 : 

Q1:把工作表改名後,內部公式會壞掉嗎?

        多數情況不會,因為系統會自動更新引用。但跨檔的 IMPORTRANGE 因為是純字串,就得手動更新或改用設定值抽離。

Q2:為什麼我右鍵「重新命名」會跳錯?

        通常是撞到已存在的分頁名,或名稱含不建議的符號。先檢查重名,再做一次清洗。

Q3:能不能一次替 50 個分頁改名?

        可以,用 Apps Script 迴圈 setName() 最穩。若擔心撞名,先在陣列裡檢查衝突,必要時用暫名(tmp_)兩階段改名。

Q4:我想改分頁顯示文字,但不想影響程式怎麼找它?

        用 sheetId。名稱給人看,ID 給程式用。這需要進階 API(Advanced Sheets API)或先記下 ID 再操作。

Q5:有推薦的命名長度嗎?

        10~25 字通常剛好,關鍵在前,次要訊息放後面或寫在頁首備註。


延伸閱讀推薦:

張貼留言 (0)
較新的 較舊