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

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

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

從圖中可以看出,代碼并不是直接“批量修改”,而是通過循環(huán)把批量任務(wù)拆成一張表一張表地處理。這個思路很重要,因為后面很多 Excel 自動化任務(wù)都是類似套路:先獲取對象集合,再循環(huán)處理每個對象,最后保存結(jié)果。
4. 實現(xiàn)代碼:用 replace 批量替換工作表名稱
下面這段代碼使用 xlwings 作為示例。它的好處是比較貼近真實 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 兩個變量。雖然直接寫一行也能實現(xiàn),但在實際排錯時,保留變量更容易打印日志,也更容易判斷腳本到底修改了哪些工作表。
如果想把 銷售 替換成 營收,只需要這樣修改:
old_word = "銷售" new_word = "營收"
這類代碼最怕的是“看起來運行成功,但結(jié)果不符合預(yù)期”。所以寫完腳本之后,不要只看有沒有報錯,還要打開 Excel 文件檢查工作表名稱是否真正變更。
5. 進階用法:只重命名部分工作表
真實辦公場景里,不一定每次都要修改所有工作表。有時候只想改第 2 張到第 5 張,有時候只想改名稱中包含某個關(guān)鍵詞的工作表。這時就不能簡單地“全量遍歷后全部替換”,否則很容易誤傷正常工作表。
這里要有一個判斷:全量處理適合規(guī)則非常統(tǒng)一的文件;部分處理適合結(jié)構(gòu)復(fù)雜、混合多類工作表的文件。越是正式報表,越應(yīng)該謹(jǐn)慎控制處理范圍。
這張圖展示的是兩種常見的部分重命名方式:一種是通過切片控制工作表范圍,另一種是通過條件判斷篩選需要處理的工作表。

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

從圖中可以看出,Excel 工作表名稱必須保持唯一。如果兩個工作表替換后變成同一個名字,腳本就會失敗。比如 銷售報表 和 報表 在某些替換規(guī)則下可能都變成 報表,這就會造成重名沖突。
另外,工作表名稱不能包含 \、/、:、*、?、[、] 等非法字符,也不能超過 31 個字符。如果腳本沒有提前校驗這些規(guī)則,批量運行時就可能中途報錯,甚至導(dǎo)致部分表已經(jīng)修改、部分表沒有修改。
更穩(wěn)妥的做法是先寫一個名稱校驗函數(shù),對新名稱進行檢查。下面是一個簡單示例:
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
如果要進一步增強穩(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. 完整增強版代碼:增加校驗和日志輸出
如果只是學(xué)習(xí),前面的基礎(chǔ)版代碼已經(jīng)夠用。但如果準(zhǔn)備把它作為自己的辦公自動化腳本模板,我建議增加三個能力:名稱校驗、重復(fù)檢測、日志輸出。這樣腳本更接近真實可用狀態(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, "校驗通過"
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} 校驗失敗:{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ǔ)版更啰嗦,但更適合真實工作。因為它先生成重命名計劃,檢查沒有問題之后才真正執(zhí)行修改。這就是自動化腳本里很重要的思想:先預(yù)演,再執(zhí)行。
如果處理的是非常重要的業(yè)務(wù)文件,還可以進一步增加備份邏輯,把原文件復(fù)制一份后再處理。這樣即使規(guī)則寫錯,也能快速回退。
9. 總結(jié)提升:把小案例沉淀成自己的腳本思維
這一節(jié)表面上是在學(xué)習(xí) replace() 和工作表重命名,本質(zhì)上是在訓(xùn)練一種辦公自動化思維:把人工重復(fù)操作抽象成對象、規(guī)則和循環(huán)。
對象是工作表,規(guī)則是名稱替換,循環(huán)是逐張?zhí)幚?。只要這個思路掌握了,后面處理批量改文件名、批量改單元格內(nèi)容、批量匯總多個工作簿,邏輯其實都是相通的。
不要只滿足于“代碼能跑”。真正有價值的自動化腳本,應(yīng)該具備可驗證、可回退、可復(fù)用的能力。尤其是涉及 Excel 文件修改時,腳本執(zhí)行前要確認(rèn)規(guī)則,執(zhí)行中要有日志,執(zhí)行后要檢查結(jié)果。
我對這一節(jié)的理解是:批量重命名工作表不是一個孤立技巧,而是 Python 辦公自動化中非常基礎(chǔ)的能力模塊。把這個模塊寫穩(wěn),后面很多 Excel 批處理任務(wù)都會更容易上手。
以上就是Python批量重命名Excel工作表的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Python重命名Excel工作表的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python實現(xiàn)高效迭代固定大小記錄的專業(yè)指南
在數(shù)據(jù)處理、文件解析和網(wǎng)絡(luò)編程中,我們經(jīng)常需要處理由固定長度記錄組成的數(shù)據(jù)塊,本文將詳細(xì)介紹一下Python如何實現(xiàn)高效迭代固定大小記錄,有需要的小伙伴可以了解下2025-09-09
Python輕松實現(xiàn)Word文檔對比并生成可視化HTML報告
在日常工作和學(xué)習(xí)中,我們經(jīng)常需要對兩個版本的文檔進行比對,本文將使用 Python + python-docx + difflib 實現(xiàn)一個自動化 Word 文檔對比工具,感興趣的可以了解下2025-08-08

