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

