Python批量重命名Excel工作表的示例詳解
1. 問題背景:為什么要批量重命名工作表
本文主題是:批量重命名一個工作簿中的所有工作表。這個案例看起來不復(fù)雜,但它其實(shí)很有代表性,因?yàn)樗鉀Q的是 Excel 辦公自動化里非常常見的一類問題:對象不是一個,而是一組;操作不是一次,而是批量重復(fù)執(zhí)行。
在日常報(bào)表處理中,一個工作簿里經(jīng)常會有很多工作表,比如 銷售_1月、銷售_2月、銷售_3月、銷售-華北、銷售-華東。如果只是改一兩張表,手動操作問題不大;但如果一個文件里有幾十張工作表,每個月都要處理一次,手動重命名就會變成重復(fù)勞動。
推薦做法是:把這種“規(guī)則明確、重復(fù)次數(shù)多、人工容易漏”的工作交給 Python。人負(fù)責(zé)判斷規(guī)則,腳本負(fù)責(zé)機(jī)械執(zhí)行,這才是辦公自動化真正能節(jié)省時(shí)間的地方。
這張圖展示的是本文的整體主題:用 Python 操作 Excel,對工作簿中的工作表名稱進(jìn)行批量替換,從而實(shí)現(xiàn)一鍵重命名。

從圖中可以看出,批量重命名的本質(zhì)不是“打開 Excel 點(diǎn)幾下”,而是把舊名稱中的固定關(guān)鍵詞提取出來,再用程序統(tǒng)一替換。比如將工作表名中的 銷售 刪除,最終得到更干凈、更統(tǒng)一的名稱結(jié)構(gòu)。
2. 應(yīng)用場景:哪些情況適合用腳本處理
這個案例最適合處理命名規(guī)則相對固定的 Excel 工作簿。比如每張表都帶有相同前綴、相同業(yè)務(wù)關(guān)鍵詞,或者每次導(dǎo)出的報(bào)表都會自動帶上某些不需要的文字。只要重命名規(guī)則能說清楚,腳本就能穩(wěn)定執(zhí)行。
常見場景包括:月度銷售報(bào)表、區(qū)域匯總報(bào)表、庫存分類報(bào)表、部門統(tǒng)計(jì)表、項(xiàng)目進(jìn)度表等。尤其是在一個工作簿里有大量 sheet 頁時(shí),批量處理的價(jià)值會非常明顯。
不建議一上來就寫復(fù)雜腳本。真正穩(wěn)妥的做法是先拿一個測試文件驗(yàn)證規(guī)則,比如先確認(rèn)要刪除的關(guān)鍵詞是什么、刪除后會不會出現(xiàn)重名、是否會影響后續(xù)公式引用。腳本能提高效率,但不能替你判斷業(yè)務(wù)規(guī)則是否正確。
這張圖展示的是實(shí)際應(yīng)用場景:將工作表名稱中的關(guān)鍵詞統(tǒng)一刪除,用于報(bào)表批量處理和辦公自動化。

從圖中可以看出,處理前的工作表名稱都包含 銷售 這個關(guān)鍵詞;處理后,關(guān)鍵詞被統(tǒng)一刪除,只保留月份或區(qū)域信息。這種場景非常適合用 replace() 完成,因?yàn)樗囊?guī)則簡單、目標(biāo)明確、結(jié)果也容易驗(yàn)證。
3. 核心原理:不是重命名一張表,而是遍歷一組表
批量重命名工作表的核心邏輯可以拆成三步:第一步,獲取當(dāng)前工作簿里的所有工作表;第二步,循環(huán)遍歷每一張工作表;第三步,對每一張工作表的名稱執(zhí)行字符串替換。
原理上要抓住一個關(guān)鍵點(diǎn):Excel 工作簿不是一個孤立文件,里面還包含很多對象,比如工作表、單元格、區(qū)域、圖表等。本案例處理的對象就是工作表集合,也就是 workbook.sheets 或類似對象。
這張圖展示的是代碼層面的核心邏輯:獲取工作表集合、通過循環(huán)逐張?zhí)幚?、最后使?replace() 完成名稱替換。

從圖中可以看出,代碼并不是直接“批量修改”,而是通過循環(huán)把批量任務(wù)拆成一張表一張表地處理。這個思路很重要,因?yàn)楹竺婧芏?Excel 自動化任務(wù)都是類似套路:先獲取對象集合,再循環(huán)處理每個對象,最后保存結(jié)果。
4. 實(shí)現(xiàn)代碼:用 replace 批量替換工作表名稱
下面這段代碼使用 xlwings 作為示例。它的好處是比較貼近真實(shí) Excel 操作邏輯,適合初學(xué)者理解“打開工作簿、獲取工作表、修改名稱、保存關(guān)閉”的完整過程。
import xlwings as xw
file_path = r"e:\file\demo.xlsx" # 修改為你的 Excel 文件路徑
old_word = "銷售"
new_word = "" # 空字符串表示刪除該關(guān)鍵詞
app = xw.App(visible=False, add_book=False)
try:
wb = app.books.open(file_path)
worksheets = wb.sheets
for sht in worksheets:
old_name = sht.name
new_name = old_name.replace(old_word, new_word)
if old_name != new_name:
sht.name = new_name
wb.save()
wb.close()
finally:
app.quit()
這里的 old_word 表示要查找的舊關(guān)鍵詞,new_word 表示替換后的新內(nèi)容。如果 new_word 是空字符串,就相當(dāng)于把舊關(guān)鍵詞刪除。比如 銷售_1月 會變成 _1月。
推薦保留 old_name 和 new_name 兩個變量。雖然直接寫一行也能實(shí)現(xiàn),但在實(shí)際排錯時(shí),保留變量更容易打印日志,也更容易判斷腳本到底修改了哪些工作表。
如果想把 銷售 替換成 營收,只需要這樣修改:
old_word = "銷售" new_word = "營收"
這類代碼最怕的是“看起來運(yùn)行成功,但結(jié)果不符合預(yù)期”。所以寫完腳本之后,不要只看有沒有報(bào)錯,還要打開 Excel 文件檢查工作表名稱是否真正變更。
5. 進(jìn)階用法:只重命名部分工作表
真實(shí)辦公場景里,不一定每次都要修改所有工作表。有時(shí)候只想改第 2 張到第 5 張,有時(shí)候只想改名稱中包含某個關(guān)鍵詞的工作表。這時(shí)就不能簡單地“全量遍歷后全部替換”,否則很容易誤傷正常工作表。
這里要有一個判斷:全量處理適合規(guī)則非常統(tǒng)一的文件;部分處理適合結(jié)構(gòu)復(fù)雜、混合多類工作表的文件。越是正式報(bào)表,越應(yīng)該謹(jǐn)慎控制處理范圍。
這張圖展示的是兩種常見的部分重命名方式:一種是通過切片控制工作表范圍,另一種是通過條件判斷篩選需要處理的工作表。

從圖中可以看出,切片適合處理固定位置的工作表,比如第 2 到第 5 張;條件篩選適合處理名稱中包含指定關(guān)鍵詞的工作表,比如只處理包含 銷售 的 sheet。相比全量處理,部分重命名更穩(wěn),也更符合真實(shí)辦公場景。
如果只想處理第 2 到第 5 張工作表,可以使用切片:
for sht in worksheets[1:5]:
sht.name = sht.name.replace("銷售", "")
這里要注意,Python 的切片是左閉右開,worksheets[1:5] 對應(yīng)的是第 2、3、4、5 張工作表,不包括第 6 張。
如果只想處理名稱中包含 銷售 的工作表,可以使用條件判斷:
for sht in worksheets:
if "銷售" in sht.name:
sht.name = sht.name.replace("銷售", "")
實(shí)際使用時(shí)我更推薦條件判斷。因?yàn)樗灰蕾嚬ぷ鞅砦恢茫灰蕾嚸Q規(guī)則。只要命名規(guī)范穩(wěn)定,條件判斷就比固定序號更可靠。
6. 效果驗(yàn)證:腳本跑完不等于任務(wù)完成
很多初學(xué)者寫自動化腳本時(shí)容易犯一個錯誤:只要程序沒有報(bào)錯,就認(rèn)為任務(wù)完成了。這個判斷太粗糙。辦公自動化真正要看的是輸出結(jié)果是否符合業(yè)務(wù)預(yù)期。
本案例至少要做三類驗(yàn)證:第一,工作表名稱是否已經(jīng)按規(guī)則替換;第二,是否存在誤刪關(guān)鍵詞導(dǎo)致名稱異常;第三,是否出現(xiàn)重名、非法字符或長度超限等問題。
如果是企業(yè)內(nèi)部實(shí)際使用,我建議增加一份修改日志,把修改前和修改后的工作表名稱都記錄下來。這樣后續(xù)出現(xiàn)問題時(shí),能快速定位是哪張表被改過。
for sht in worksheets:
old_name = sht.name
new_name = old_name.replace(old_word, new_word)
if old_name != new_name:
print(f"重命名:{old_name} -> {new_name}")
sht.name = new_name
推薦先打印日志,再真正保存文件。如果第一次運(yùn)行不確定結(jié)果,可以先不執(zhí)行 wb.save(),只打印重命名計(jì)劃,確認(rèn)沒問題后再保存。
7. 常見問題:批量重命名最容易踩的坑
批量重命名工作表看似簡單,但有幾個坑必須提前知道。Excel 對工作表名稱有自己的限制,不是任何字符串都能作為 sheet 名稱。
這張圖展示的是批量重命名工作表時(shí)最常見的三個問題:工作表名重復(fù)、包含非法字符、名稱長度超限。

從圖中可以看出,Excel 工作表名稱必須保持唯一。如果兩個工作表替換后變成同一個名字,腳本就會失敗。比如 銷售報(bào)表 和 報(bào)表 在某些替換規(guī)則下可能都變成 報(bào)表,這就會造成重名沖突。
另外,工作表名稱不能包含 \、/、:、*、?、[、] 等非法字符,也不能超過 31 個字符。如果腳本沒有提前校驗(yàn)這些規(guī)則,批量運(yùn)行時(shí)就可能中途報(bào)錯,甚至導(dǎo)致部分表已經(jīng)修改、部分表沒有修改。
更穩(wěn)妥的做法是先寫一個名稱校驗(yàn)函數(shù),對新名稱進(jìn)行檢查。下面是一個簡單示例:
def is_valid_sheet_name(name):
invalid_chars = ['\\', '/', ':', '*', '?', '[', ']']
if not name:
return False
if len(name) > 31:
return False
for char in invalid_chars:
if char in name:
return False
return True
如果要進(jìn)一步增強(qiáng)穩(wěn)定性,還可以在重命名前先收集所有新名稱,統(tǒng)一檢查是否存在重復(fù),而不是邊改邊發(fā)現(xiàn)問題。
new_names = []
for sht in worksheets:
new_name = sht.name.replace(old_word, new_word)
new_names.append(new_name)
if len(new_names) != len(set(new_names)):
raise ValueError("重命名后存在重復(fù)工作表名,請先檢查規(guī)則。")
正式處理重要文件前,一定要先備份原文件。這個習(xí)慣比任何代碼技巧都重要。腳本執(zhí)行速度很快,錯起來也很快;沒有備份,后悔成本會很高。
8. 完整增強(qiáng)版代碼:增加校驗(yàn)和日志輸出
如果只是學(xué)習(xí),前面的基礎(chǔ)版代碼已經(jīng)夠用。但如果準(zhǔn)備把它作為自己的辦公自動化腳本模板,我建議增加三個能力:名稱校驗(yàn)、重復(fù)檢測、日志輸出。這樣腳本更接近真實(shí)可用狀態(tài)。
import xlwings as xw
file_path = r"e:\file\demo.xlsx"
old_word = "銷售"
new_word = ""
def is_valid_sheet_name(name):
invalid_chars = ['\\', '/', ':', '*', '?', '[', ']']
if not name:
return False, "工作表名不能為空"
if len(name) > 31:
return False, "工作表名不能超過 31 個字符"
for char in invalid_chars:
if char in name:
return False, f"工作表名不能包含非法字符:{char}"
return True, "校驗(yàn)通過"
app = xw.App(visible=False, add_book=False)
try:
wb = app.books.open(file_path)
worksheets = wb.sheets
rename_plan = []
for sht in worksheets:
old_name = sht.name
new_name = old_name.replace(old_word, new_word)
valid, message = is_valid_sheet_name(new_name)
if not valid:
raise ValueError(f"{old_name} -> {new_name} 校驗(yàn)失?。簕message}")
rename_plan.append((old_name, new_name))
new_names = [item[1] for item in rename_plan]
if len(new_names) != len(set(new_names)):
raise ValueError("重命名后存在重復(fù)工作表名,請調(diào)整替換規(guī)則。")
for old_name, new_name in rename_plan:
if old_name != new_name:
print(f"重命名:{old_name} -> {new_name}")
wb.sheets[old_name].name = new_name
wb.save()
wb.close()
finally:
app.quit()
這版代碼比基礎(chǔ)版更啰嗦,但更適合真實(shí)工作。因?yàn)樗壬芍孛?jì)劃,檢查沒有問題之后才真正執(zhí)行修改。這就是自動化腳本里很重要的思想:先預(yù)演,再執(zhí)行。
如果處理的是非常重要的業(yè)務(wù)文件,還可以進(jìn)一步增加備份邏輯,把原文件復(fù)制一份后再處理。這樣即使規(guī)則寫錯,也能快速回退。
9. 總結(jié)提升:把小案例沉淀成自己的腳本思維
這一節(jié)表面上是在學(xué)習(xí) replace() 和工作表重命名,本質(zhì)上是在訓(xùn)練一種辦公自動化思維:把人工重復(fù)操作抽象成對象、規(guī)則和循環(huán)。
對象是工作表,規(guī)則是名稱替換,循環(huán)是逐張?zhí)幚?。只要這個思路掌握了,后面處理批量改文件名、批量改單元格內(nèi)容、批量匯總多個工作簿,邏輯其實(shí)都是相通的。
不要只滿足于“代碼能跑”。真正有價(jià)值的自動化腳本,應(yīng)該具備可驗(yàn)證、可回退、可復(fù)用的能力。尤其是涉及 Excel 文件修改時(shí),腳本執(zhí)行前要確認(rèn)規(guī)則,執(zhí)行中要有日志,執(zhí)行后要檢查結(jié)果。
我對這一節(jié)的理解是:批量重命名工作表不是一個孤立技巧,而是 Python 辦公自動化中非?;A(chǔ)的能力模塊。把這個模塊寫穩(wěn),后面很多 Excel 批處理任務(wù)都會更容易上手。
以上就是Python批量重命名Excel工作表的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Python重命名Excel工作表的資料請關(guān)注腳本之家其它相關(guān)文章!
- Python管理Excel工作表之創(chuàng)建、復(fù)制、刪除與重命名操作詳解
- Python實(shí)現(xiàn)提取Excel嵌入圖片并重命名
- Python根據(jù)Excel表進(jìn)行文件重命名的實(shí)現(xiàn)示例
- Python批量合并多個Excel工作簿中同名工作表
- Python自動化拆分Excel工作表的實(shí)戰(zhàn)教學(xué)
- Python自動化批量排序Excel所有工作表的完整指南
- Python自動化篩選Excel工作簿中多個工作表的實(shí)戰(zhàn)教學(xué)
- Python自動化實(shí)現(xiàn)對多個Excel工作簿中的工作表進(jìn)行分類匯總
相關(guān)文章
Python腳本實(shí)現(xiàn)依賴漏洞自動掃描工具
這篇文章主要為大家詳細(xì)介紹了如何通過Python腳本實(shí)現(xiàn)一個依賴漏洞自動掃描工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2026-03-03
Python實(shí)現(xiàn)高效迭代固定大小記錄的專業(yè)指南
在數(shù)據(jù)處理、文件解析和網(wǎng)絡(luò)編程中,我們經(jīng)常需要處理由固定長度記錄組成的數(shù)據(jù)塊,本文將詳細(xì)介紹一下Python如何實(shí)現(xiàn)高效迭代固定大小記錄,有需要的小伙伴可以了解下2025-09-09
Python輕松實(shí)現(xiàn)Word文檔對比并生成可視化HTML報(bào)告
在日常工作和學(xué)習(xí)中,我們經(jīng)常需要對兩個版本的文檔進(jìn)行比對,本文將使用 Python + python-docx + difflib 實(shí)現(xiàn)一個自動化 Word 文檔對比工具,感興趣的可以了解下2025-08-08
Python實(shí)現(xiàn)郵件發(fā)送功能的方法詳解
本文將學(xué)會各種類型的郵件發(fā)送方式,比如普通文本郵件、帶附件的郵件等等,如何通過程序發(fā)送郵件現(xiàn)在我們還不太了解,接下來就會為大家進(jìn)行詳細(xì)的介紹2022-05-05

