使用Python輕松實(shí)現(xiàn)添加與刪除Excel工作表的實(shí)戰(zhàn)指南
?早上九點(diǎn),我剛打開(kāi)電腦,同事小張就抱著一摞Excel文件沖了過(guò)來(lái)。
“幫幫忙,我這二十多個(gè)Excel文件,每個(gè)里面都要加一個(gè)匯總工作表,還要把那個(gè)舊的測(cè)試表刪掉。我一個(gè)一個(gè)手動(dòng)操作,弄到明年也弄不完啊。”
我看了看他那生無(wú)可戀的表情,笑了笑說(shuō):“別急,Python幾行代碼就搞定了。”
小張一臉懷疑:“Python還能干這個(gè)?”
當(dāng)然能。而且比你想象的要簡(jiǎn)單得多。
準(zhǔn)備工作:裝個(gè)庫(kù)就行
要用Python操作Excel,我們需要一個(gè)叫openpyxl的庫(kù)。它就像是一個(gè)翻譯官,讓Python能聽(tīng)懂Excel說(shuō)的話。
打開(kāi)命令行,輸入這一行:
pip install openpyxl
如果你用的是Jupyter Notebook或者Anaconda,也可以用:
conda install openpyxl
裝好了之后,我們就可以開(kāi)始玩了。
第一個(gè)例子:打開(kāi)一個(gè)Excel文件
假設(shè)我們有一個(gè)叫“銷售數(shù)據(jù).xlsx”的文件,里面已經(jīng)有一些工作表了。
from openpyxl import load_workbook
# 加載Excel文件
wb = load_workbook('銷售數(shù)據(jù).xlsx')
# 看看里面有哪些工作表
print(wb.sheetnames)
運(yùn)行這段代碼,你會(huì)看到類似這樣的輸出:
['一月銷售', '二月銷售', '三月銷售', '舊數(shù)據(jù)_不要?jiǎng)?#39;]
好了,現(xiàn)在我們能看到這個(gè)Excel文件里到底藏了幾個(gè)工作表。
添加新工作表:真的就一行代碼
小張的第一個(gè)需求是加一個(gè)匯總表。怎么做呢?
# 在最后面添加一個(gè)叫“季度匯總”的工作表
wb.create_sheet('季度匯總')
# 保存文件
wb.save('銷售數(shù)據(jù).xlsx')
就這么簡(jiǎn)單。create_sheet這個(gè)方法就是用來(lái)創(chuàng)建新工作表的。
如果你想把這個(gè)新工作表放在最前面,可以這樣寫(xiě):
# 在第一個(gè)位置插入新工作表
wb.create_sheet('季度匯總', 0)
那個(gè)0表示位置索引。0就是第一個(gè),1就是第二個(gè),依此類推。
小張看完這段代碼,瞪大了眼睛:“就這?我手動(dòng)點(diǎn)半天,你一行代碼就搞定了?”
我點(diǎn)點(diǎn)頭:“Python就是干這個(gè)用的。”
刪除工作表:同樣簡(jiǎn)單
小張的第二個(gè)需求是刪掉那個(gè)叫“舊數(shù)據(jù)_不要?jiǎng)?rdquo;的工作表。
刪除操作也很直接:
# 獲取要?jiǎng)h除的工作表
old_sheet = wb['舊數(shù)據(jù)_不要?jiǎng)?]
# 刪除它
wb.remove(old_sheet)
# 保存
wb.save('銷售數(shù)據(jù).xlsx')
注意一個(gè)坑:刪除工作表之后,一定要記得保存。不保存的話,原文件不會(huì)發(fā)生任何變化。
還有一個(gè)更簡(jiǎn)潔的寫(xiě)法:
# 一行搞定
wb.remove(wb['舊數(shù)據(jù)_不要?jiǎng)?])
wb.save('銷售數(shù)據(jù).xlsx')
小張看到這里,已經(jīng)開(kāi)始興奮了:“那我要處理二十多個(gè)文件,是不是寫(xiě)個(gè)循環(huán)就行了?”
“聰明。”
批量處理:讓電腦幫你干活
小張的實(shí)際情況是:一個(gè)文件夾里有二十多個(gè)Excel文件,每個(gè)都要做同樣的操作——添加“匯總”表,刪除“臨時(shí)”表。
我們寫(xiě)個(gè)循環(huán)來(lái)解決:
import os
from openpyxl import load_workbook
# 存放Excel文件的文件夾路徑
folder_path = 'C:/銷售數(shù)據(jù)/'
# 遍歷文件夾里所有的文件
for filename in os.listdir(folder_path):
if filename.endswith('.xlsx'): # 只處理Excel文件
file_path = os.path.join(folder_path, filename)
# 打開(kāi)文件
wb = load_workbook(file_path)
# 添加匯總表(如果還沒(méi)有的話)
if '匯總' not in wb.sheetnames:
wb.create_sheet('匯總')
# 刪除臨時(shí)表(如果存在的話)
if '臨時(shí)' in wb.sheetnames:
wb.remove(wb['臨時(shí)'])
# 保存修改
wb.save(file_path)
print(f'處理完成:{filename}')
print('全部搞定!')
跑完這個(gè)腳本,小張那二十多個(gè)文件就全部處理好了。他只需要去泡杯咖啡,回來(lái)就能看到結(jié)果。
避坑指南:新手最容易踩的五個(gè)坑
坑一:忘記保存
這是最常見(jiàn)的問(wèn)題。代碼寫(xiě)完了,運(yùn)行也沒(méi)報(bào)錯(cuò),但打開(kāi)Excel一看,什么都沒(méi)變。
原因很簡(jiǎn)單:忘了寫(xiě)wb.save()。
記住一個(gè)原則:load_workbook只是把文件讀到內(nèi)存里,所有修改都只是在內(nèi)存中。只有執(zhí)行save,才會(huì)真正寫(xiě)回硬盤(pán)。
坑二:刪除不存在的工作表
如果你試圖刪除一個(gè)不存在的工作表,Python會(huì)直接報(bào)錯(cuò)。
# 這樣寫(xiě),如果工作表不存在就會(huì)報(bào)錯(cuò) wb.remove(wb['不存在的表']) # 報(bào)錯(cuò)!
安全的寫(xiě)法是先判斷一下:
if '不存在的表' in wb.sheetnames:
wb.remove(wb['不存在的表'])
坑三:工作表名字不能重復(fù)
Excel不允許同一個(gè)文件里有重名的工作表。如果你嘗試創(chuàng)建兩個(gè)同名的表,Python會(huì)報(bào)錯(cuò)。
wb.create_sheet('匯總')
wb.create_sheet('匯總') # 報(bào)錯(cuò)!名字重復(fù)了
要么先檢查是否存在:
if '匯總' not in wb.sheetnames:
wb.create_sheet('匯總')
要么換個(gè)名字:
wb.create_sheet('匯總_v2')
坑四:文件被占用
如果你在運(yùn)行Python腳本的時(shí)候,Excel文件正被其他程序(比如你手動(dòng)打開(kāi)的Excel)打開(kāi)著,Python就沒(méi)法寫(xiě)入。
解決方法:關(guān)掉那個(gè)文件,或者換個(gè)沒(méi)被占用的文件。
坑五:openpyxl不支持.xls文件
openpyxl只能處理.xlsx格式的文件。如果你遇到老舊的.xls文件,需要用另一個(gè)庫(kù)叫xlrd和xlwt。
如果實(shí)在需要處理.xls文件,最簡(jiǎn)單的辦法是先用Excel把它另存為.xlsx格式。
玩點(diǎn)高級(jí)的:添加帶數(shù)據(jù)的工作表
光添加一個(gè)空表可能還不夠。有時(shí)候我們想在新表里填上一些數(shù)據(jù),比如匯總統(tǒng)計(jì)。
來(lái)看個(gè)例子:把所有月份的數(shù)據(jù)匯總到一個(gè)新表里。
from openpyxl import load_workbook
wb = load_workbook('銷售數(shù)據(jù).xlsx')
# 創(chuàng)建匯總表
summary_sheet = wb.create_sheet('自動(dòng)匯總')
# 寫(xiě)個(gè)標(biāo)題
summary_sheet['A1'] = '月份'
summary_sheet['B1'] = '總銷售額'
# 從各個(gè)月份的表里收集數(shù)據(jù)
row_num = 2
for month in ['一月銷售', '二月銷售', '三月銷售']:
if month in wb.sheetnames:
month_sheet = wb[month]
# 假設(shè)每個(gè)月的表里,B列是銷售額,從第2行到第10行
total = 0
for row in range(2, 11):
cell_value = month_sheet.cell(row, 2).value
if cell_value and isinstance(cell_value, (int, float)):
total += cell_value
# 寫(xiě)入?yún)R總表
summary_sheet.cell(row_num, 1, month)
summary_sheet.cell(row_num, 2, total)
row_num += 1
wb.save('銷售數(shù)據(jù)_帶匯總.xlsx')
這樣跑完之后,新生成的Excel文件里就多了一個(gè)“自動(dòng)匯總”表,里面整整齊齊地列著每個(gè)月的總銷售額。
更優(yōu)雅的寫(xiě)法:使用with語(yǔ)句
每次都要手動(dòng)save,有時(shí)候會(huì)忘記。Python提供了一個(gè)更優(yōu)雅的寫(xiě)法,叫做上下文管理器。不過(guò)openpyxl本身不直接支持,我們可以自己封裝一下:
from openpyxl import load_workbook
def process_excel(file_path):
wb = load_workbook(file_path)
# 在這里做各種操作
wb.create_sheet('新表')
# 自動(dòng)保存
wb.save(file_path)
process_excel('我的文件.xlsx')
把操作寫(xiě)成一個(gè)函數(shù),調(diào)用完自動(dòng)保存,這樣就不容易忘了。
實(shí)戰(zhàn)小項(xiàng)目:清理Excel工具箱
最后,我們來(lái)做一個(gè)實(shí)用的小工具。它可以:
- 刪除所有名字里帶“備份”的工作表
- 在每個(gè)文件開(kāi)頭添加一個(gè)“目錄”工作表
- 把所有工作表的名字列在目錄里
import os
from openpyxl import load_workbook
def clean_and_add_catalog(folder_path):
for filename in os.listdir(folder_path):
if not filename.endswith('.xlsx'):
continue
file_path = os.path.join(folder_path, filename)
print(f'正在處理:{filename}')
wb = load_workbook(file_path)
# 找出所有帶“備份”的工作表并刪除
sheets_to_delete = [s for s in wb.sheetnames if '備份' in s]
for sheet_name in sheets_to_delete:
wb.remove(wb[sheet_name])
print(f' 已刪除:{sheet_name}')
# 在第一個(gè)位置創(chuàng)建目錄表
catalog = wb.create_sheet('目錄', 0)
catalog['A1'] = '工作表目錄'
catalog['A2'] = '序號(hào)'
catalog['B2'] = '工作表名稱'
# 列出所有剩余的工作表
for idx, sheet_name in enumerate(wb.sheetnames[1:], start=1): # 跳過(guò)目錄表自己
catalog.cell(idx + 2, 1, idx)
catalog.cell(idx + 2, 2, sheet_name)
wb.save(file_path)
print(f' 完成!剩余工作表:{wb.sheetnames[1:]}\n')
# 使用
clean_and_add_catalog('C:/我的Excel文件/')
這個(gè)工具跑完,每個(gè)文件都會(huì)變得更干凈、更好用。
總結(jié)一下(別擔(dān)心,很短)
Python操作Excel工作表,核心就三個(gè)動(dòng)作:
- 加載:
load_workbook('文件.xlsx') - 添加:
create_sheet('表名') - 刪除:
remove(工作表對(duì)象) - 保存:
save('文件.xlsx')
會(huì)了這三個(gè),再加上一個(gè)循環(huán),就能處理成百上千個(gè)文件。
小張后來(lái)請(qǐng)我喝了杯咖啡。他說(shuō):“早知道Python這么方便,我過(guò)去那些加班的晚上都白費(fèi)了。”
我說(shuō):“沒(méi)事,現(xiàn)在開(kāi)始用,以后就不用加班了。”
他笑了笑,回去繼續(xù)寫(xiě)他的Python腳本去了。這次不是為了加班,而是為了早點(diǎn)下班。
?以上就是使用Python輕松實(shí)現(xiàn)添加與刪除Excel工作表的實(shí)戰(zhàn)指南的詳細(xì)內(nèi)容,更多關(guān)于Python添加與刪除Excel工作表的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 使用Python添加和刪除Excel文件中的工作表
- Python實(shí)現(xiàn)多種場(chǎng)景下Excel工作表復(fù)制功能
- Python利用openpyxl與pandas處理Excel多工作表的實(shí)戰(zhàn)對(duì)比
- 使用Python在Excel工作表中創(chuàng)建圖表的實(shí)現(xiàn)步驟
- Python實(shí)現(xiàn)一鍵合并N個(gè)Excel工作表/文件
- 從入門到實(shí)戰(zhàn)詳解Python如何將Excel工作表轉(zhuǎn)換為PDF
- Python實(shí)現(xiàn)自動(dòng)化設(shè)置Excel工作表行高和列寬
相關(guān)文章
Python實(shí)現(xiàn)多項(xiàng)式擬合正弦函數(shù)詳情
這篇文章主要介紹了Python實(shí)現(xiàn)多項(xiàng)式擬合正弦函數(shù)詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
python pycharm最新版本激活碼(永久有效)附python安裝教程
PyCharm是一個(gè)多功能的集成開(kāi)發(fā)環(huán)境,只需要在pycharm中創(chuàng)建python file就運(yùn)行python,并且pycharm內(nèi)置完備的功能,這篇文章給大家介紹python pycharm激活碼最新版,需要的朋友跟隨小編一起看看吧2020-01-01
pyspark 隨機(jī)森林的實(shí)現(xiàn)
這篇文章主要介紹了pyspark 隨機(jī)森林的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
使用python+pygame開(kāi)發(fā)消消樂(lè)游戲附完整源碼
消消樂(lè)小游戲相信大家都玩過(guò),大人小孩都喜歡玩的一款小游戲,那么基于程序是如何實(shí)現(xiàn)的呢?今天帶大家,用python+pygame來(lái)實(shí)現(xiàn)一下這個(gè)花里胡哨的消消樂(lè)小游戲功能,感興趣的朋友一起看看吧2021-06-06
python使用whisper讀取藍(lán)牙耳機(jī)語(yǔ)音并轉(zhuǎn)為文字
這篇文章主要為大家詳細(xì)介紹了python如何使用whisper讀取藍(lán)牙耳機(jī)語(yǔ)音并識(shí)別轉(zhuǎn)為文字,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-05-05
Python ATM功能實(shí)現(xiàn)代碼實(shí)例
這篇文章主要介紹了Python ATM功能實(shí)現(xiàn)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03

