工作表名稱就像資料專案的路標:清楚,就不迷路;含糊,日後每個公式都在找人。多數人都知道雙擊標籤就能改名,但真正的關鍵在「命名規則」與「批次流程」:如何一次替 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 字通常剛好,關鍵在前,次要訊息放後面或寫在頁首備註。
