Python實(shí)現(xiàn)自動(dòng)化操作Excel的方法詳解
引言
你是否還在為 Excel 中的重復(fù)性工作而煩惱?每天花費(fèi)大量時(shí)間進(jìn)行數(shù)據(jù)整理、格式調(diào)整、報(bào)表生成?如果是這樣,那么恭喜你,你來(lái)對(duì)地方了!Python 作為一門強(qiáng)大且易學(xué)的編程語(yǔ)言,能讓你徹底告別這些繁瑣的手動(dòng)操作,實(shí)現(xiàn) Excel 自動(dòng)化,極大地提高工作效率。
本篇文章將作為一份全面的新手指南,帶你從零開始學(xué)習(xí)如何使用 Python 自動(dòng)化操作 Excel 文件。無(wú)論你是數(shù)據(jù)分析師、辦公室文員,還是任何需要處理 Excel 的人,本文都將為你打開一扇通往高效工作的大門。
為什么選擇 Python 自動(dòng)化 Excel
在深入學(xué)習(xí)之前,我們先來(lái)了解一下為什么 Python 是自動(dòng)化 Excel 的絕佳選擇:
- 效率提升:將耗時(shí)數(shù)小時(shí)甚至數(shù)天的工作自動(dòng)化,只需幾秒鐘即可完成。
- 減少錯(cuò)誤:機(jī)器執(zhí)行任務(wù)比手動(dòng)操作更精確,大大降低人為錯(cuò)誤率。
- 可重復(fù)性:編寫一次腳本,可反復(fù)用于處理類似任務(wù),無(wú)需每次從頭開始。
- 數(shù)據(jù)處理能力:Python 擁有強(qiáng)大的數(shù)據(jù)處理庫(kù)(如 Pandas),能與 Excel 自動(dòng)化無(wú)縫結(jié)合,實(shí)現(xiàn)更復(fù)雜的數(shù)據(jù)分析。
- 易學(xué)易用:Python 語(yǔ)法簡(jiǎn)潔明了,即使是編程新手也能快速上手。
- 生態(tài)豐富:擁有多個(gè)成熟的庫(kù)來(lái)操作 Excel,功能全面。
前置準(zhǔn)備
在開始編寫代碼之前,我們需要做一些簡(jiǎn)單的準(zhǔn)備工作。
1. 安裝 Python
如果你的電腦尚未安裝 Python,請(qǐng)前往 Python 官方網(wǎng)站下載并安裝最新版本。建議選擇 3.x 系列的穩(wěn)定版本。
- 下載地址:https://www.python.org/downloads/
- 安裝時(shí)請(qǐng)務(wù)必勾選 “Add Python to PATH” 選項(xiàng),這樣可以方便地在命令行中運(yùn)行 Python。
安裝完成后,打開命令行工具(Windows 用戶搜索 CMD 或 PowerShell,macOS/Linux 用戶打開終端),輸入以下命令檢查 Python 是否安裝成功:
python --version
如果顯示 Python 版本號(hào),則表示安裝成功。
2. 安裝必要的庫(kù):openpyxl
Python 有多個(gè)庫(kù)可以操作 Excel 文件,其中 openpyxl 是一個(gè)功能強(qiáng)大且廣泛使用的庫(kù),專門用于讀寫 .xlsx 格式的 Excel 文件(Excel 2010 及更高版本)。對(duì)于新手來(lái)說(shuō),它是非常好的入門選擇。
在命令行中輸入以下命令來(lái)安裝 openpyxl:
pip install openpyxl
pip 是 Python 的包管理工具,它會(huì)自動(dòng)下載并安裝 openpyxl 及其所有依賴項(xiàng)。
Python 操作 Excel 核心庫(kù):openpyxl 簡(jiǎn)介
openpyxl 庫(kù)的核心概念包括:
Workbook(工作簿):代表一個(gè)完整的 Excel 文件。Worksheet(工作表):代表工作簿中的一個(gè)選項(xiàng)卡(如 Sheet1, Sheet2 等)。Cell(單元格):代表工作表中的一個(gè)最小單位,存儲(chǔ)具體的數(shù)據(jù)。
理解這三個(gè)概念,你就能很好地掌握 openpyxl 的基本操作。
實(shí)戰(zhàn)演練:用 Python 自動(dòng)化 Excel
現(xiàn)在,我們準(zhǔn)備好通過(guò)實(shí)際代碼來(lái)學(xué)習(xí)如何操作 Excel 了!
1. 創(chuàng)建一個(gè)新的 Excel 文件
我們將從創(chuàng)建一個(gè)全新的 Excel 工作簿開始。
from openpyxl import Workbook
# 創(chuàng)建一個(gè)新的工作簿對(duì)象
# 默認(rèn)會(huì)創(chuàng)建一個(gè)名為 'Sheet' 的工作表
wb = Workbook()
# 獲取當(dāng)前活動(dòng)的工作表 (默認(rèn)創(chuàng)建的第一個(gè)工作表)
ws = wb.active
# 可以給工作表設(shè)置一個(gè)標(biāo)題
ws.title = "我的第一個(gè)工作表"
# 保存工作簿到文件
# 注意:如果文件已存在,此操作會(huì)覆蓋原文件
wb.save("我的第一個(gè)Excel文件.xlsx")
print("Excel 文件 '我的第一個(gè)Excel文件.xlsx' 已成功創(chuàng)建!")
運(yùn)行這段代碼后,你會(huì)在腳本所在的目錄下找到一個(gè)名為 我的第一個(gè)Excel文件.xlsx 的文件。
2. 寫入數(shù)據(jù)到單元格
有兩種主要方式向單元格寫入數(shù)據(jù):直接指定單元格坐標(biāo)或使用 append() 方法。
2.1. 直接指定單元格寫入數(shù)據(jù)
你可以像操作字典一樣,通過(guò) ws['A1'] 的方式來(lái)訪問和寫入單元格。
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = "銷售數(shù)據(jù)"
# 寫入標(biāo)題行
ws['A1'] = "產(chǎn)品"
ws['B1'] = "銷量"
ws['C1'] = "價(jià)格"
# 寫入數(shù)據(jù)
ws['A2'] = "蘋果"
ws['B2'] = 100
ws['C2'] = 5.5
ws['A3'] = "香蕉"
ws['B3'] = 150
ws['C3'] = 3.0
ws['A4'] = "橘子"
ws['B4'] = 80
ws['C4'] = 4.0
wb.save("銷售報(bào)告.xlsx")
print("數(shù)據(jù)已寫入 '銷售報(bào)告.xlsx'。")
2.2. 使用append()方法寫入行數(shù)據(jù)
append() 方法非常方便,它會(huì)將你傳入的列表或元組作為一行數(shù)據(jù),添加到工作表的最后一行。
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = "員工信息"
# 寫入標(biāo)題行
ws.append(["姓名", "年齡", "部門", "入職日期"])
# 寫入多行數(shù)據(jù)
data = [
["張三", 30, "銷售部", "2020-01-15"],
["李四", 25, "市場(chǎng)部", "2021-03-01"],
["王五", 35, "技術(shù)部", "2019-07-20"]
]
for row_data in data:
ws.append(row_data)
wb.save("員工信息表.xlsx")
print("數(shù)據(jù)已寫入 '員工信息表.xlsx'。")
3. 讀取 Excel 文件中的數(shù)據(jù)
讀取數(shù)據(jù)是自動(dòng)化任務(wù)中非常常見的一步。
from openpyxl import load_workbook
# 加載現(xiàn)有的工作簿
try:
wb = load_workbook("銷售報(bào)告.xlsx")
# 獲取活動(dòng)工作表
ws = wb.active
print(f"工作表 '{ws.title}' 中的數(shù)據(jù):")
# 遍歷所有行和列讀取數(shù)據(jù)
# ws.iter_rows() 可以迭代所有行,返回單元格元組
# min_row, max_row, min_col, max_col 可以指定遍歷范圍
for row in ws.iter_rows(min_row=1, max_row=ws.max_row, min_col=1, max_col=ws.max_column):
row_values = [cell.value for cell in row]
print(row_values)
# 也可以通過(guò)指定單元格讀取
print(f"\n特定單元格數(shù)據(jù):")
print(f"A1: {ws['A1'].value}")
print(f"B2: {ws['B2'].value}")
except FileNotFoundError:
print("錯(cuò)誤:文件 '銷售報(bào)告.xlsx' 不存在,請(qǐng)先運(yùn)行寫入數(shù)據(jù)的代碼創(chuàng)建文件。")
4. 修改現(xiàn)有 Excel 文件
修改現(xiàn)有文件與創(chuàng)建文件和寫入數(shù)據(jù)類似,只是需要先加載文件。
from openpyxl import load_workbook
try:
wb = load_workbook("銷售報(bào)告.xlsx")
ws = wb.active
# 修改特定單元格的數(shù)據(jù)
ws['B2'] = 120 # 將蘋果的銷量從100改為120
ws['C2'] = 5.8 # 修改蘋果的價(jià)格
# 添加一行新數(shù)據(jù)
ws.append(["梨", 90, 6.2])
# 保存修改,可以覆蓋原文件,也可以保存為新文件
wb.save("更新后的銷售報(bào)告.xlsx") # 保存為新文件
# wb.save("銷售報(bào)告.xlsx") # 覆蓋原文件
print("Excel 文件 '銷售報(bào)告.xlsx' 已成功更新并保存為 '更新后的銷售報(bào)告.xlsx'。")
except FileNotFoundError:
print("錯(cuò)誤:文件 '銷售報(bào)告.xlsx' 不存在,請(qǐng)先運(yùn)行寫入數(shù)據(jù)的代碼創(chuàng)建文件。")
5. 插入/刪除行和列
openpyxl 提供了 insert_rows(), delete_rows(), insert_cols(), delete_cols() 等方法來(lái)操作行和列。
from openpyxl import load_workbook
try:
wb = load_workbook("銷售報(bào)告.xlsx")
ws = wb.active
print("原始數(shù)據(jù)行數(shù):", ws.max_row)
# 在第 2 行之前插入 1 行
# 參數(shù)1: 插入起始行號(hào),參數(shù)2: 插入行數(shù)
ws.insert_rows(2, 1)
ws['A2'] = "插入的新行"
ws['B2'] = "示例數(shù)據(jù)"
print("插入行后的數(shù)據(jù)行數(shù):", ws.max_row)
# 刪除第 4 行 (現(xiàn)在是原來(lái)的第 3 行)
ws.delete_rows(4, 1)
print("刪除行后的數(shù)據(jù)行數(shù):", ws.max_row)
# 在第 2 列 (B列) 之前插入 1 列
ws.insert_cols(2, 1)
ws['B1'] = "新列標(biāo)題"
ws['B2'] = "新列數(shù)據(jù)"
# 刪除第 3 列 (C列)
ws.delete_cols(3, 1)
wb.save("修改行和列的銷售報(bào)告.xlsx")
print("Excel 文件 '修改行和列的銷售報(bào)告.xlsx' 已成功創(chuàng)建。")
except FileNotFoundError:
print("錯(cuò)誤:文件 '銷售報(bào)告.xlsx' 不存在。")
6. 操作多個(gè)工作表
一個(gè) Excel 文件通常包含多個(gè)工作表。
from openpyxl import Workbook
wb = Workbook()
# 獲取默認(rèn)創(chuàng)建的活動(dòng)工作表
ws1 = wb.active
ws1.title = "數(shù)據(jù)總覽"
# 創(chuàng)建一個(gè)新的工作表
ws2 = wb.create_sheet("詳細(xì)信息")
ws2['A1'] = "這是詳細(xì)信息表"
# 創(chuàng)建另一個(gè)工作表,并指定位置 (索引從0開始)
ws3 = wb.create_sheet("報(bào)表", 0) # 插入到第一個(gè)位置
ws3['A1'] = "這是報(bào)表"
# 打印所有工作表名稱
print("所有工作表名稱:", wb.sheetnames)
# 通過(guò)名稱獲取工作表
sheet_detail = wb["詳細(xì)信息"]
sheet_detail['A2'] = "更多數(shù)據(jù)"
wb.save("多工作表文件.xlsx")
print("Excel 文件 '多工作表文件.xlsx' 已成功創(chuàng)建,包含多個(gè)工作表。")
7. 設(shè)置單元格樣式 (基礎(chǔ))
openpyxl 允許你設(shè)置單元格的字體、顏色、邊框、對(duì)齊方式等。這里我們展示一個(gè)簡(jiǎn)單的字體加粗示例。
from openpyxl import load_workbook
from openpyxl.styles import Font, PatternFill, Border, Side, Alignment
try:
wb = load_workbook("銷售報(bào)告.xlsx")
ws = wb.active
# 設(shè)置 A1 單元格字體為粗體,紅色
font_style = Font(name='Arial', size=12, bold=True, color="FF0000") # FF0000 是紅色
ws['A1'].font = font_style
# 設(shè)置 B1 單元格背景色為黃色
fill_style = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid") # FFFF00 是黃色
ws['B1'].fill = fill_style
# 設(shè)置 C1 單元格居中對(duì)齊
alignment_style = Alignment(horizontal='center', vertical='center')
ws['C1'].alignment = alignment_style
# 設(shè)置邊框 (以 A1 為例)
thin_border = Border(left=Side(style='thin'),
right=Side(style='thin'),
top=Side(style='thin'),
bottom=Side(style='thin'))
ws['A1'].border = thin_border
wb.save("帶樣式銷售報(bào)告.xlsx")
print("Excel 文件 '帶樣式銷售報(bào)告.xlsx' 已創(chuàng)建,并設(shè)置了單元格樣式。")
except FileNotFoundError:
print("錯(cuò)誤:文件 '銷售報(bào)告.xlsx' 不存在。")
常見問題與注意事項(xiàng)
在使用 Python 自動(dòng)化 Excel 時(shí),新手可能會(huì)遇到一些常見問題:
1. 文件路徑問題
相對(duì)路徑 vs. 絕對(duì)路徑:當(dāng)你只寫文件名時(shí)(如 wb.save("report.xlsx")),Python 會(huì)在當(dāng)前腳本運(yùn)行的目錄下查找或創(chuàng)建文件。如果文件不在當(dāng)前目錄,或者你需要指定一個(gè)特定位置,請(qǐng)使用絕對(duì)路徑 (C:/Users/YourName/Documents/report.xlsx 或 /home/YourName/report.xlsx)。
Windows 路徑反斜杠:在 Windows 系統(tǒng)中,路徑通常使用反斜杠 \。但在 Python 字符串中,反斜杠是轉(zhuǎn)義字符。正確的做法是:
- 使用雙反斜杠:
"C:\\Users\\..." - 使用正斜杠:
"C:/Users/..."(推薦,跨平臺(tái)兼容性更好) - 使用原始字符串:
r"C:\Users\..."
2. 數(shù)據(jù)類型轉(zhuǎn)換
openpyxl 會(huì)自動(dòng)處理 Python 數(shù)據(jù)類型到 Excel 單元格類型的轉(zhuǎn)換(例如,整數(shù)、浮點(diǎn)數(shù)、字符串、日期)。但如果你從 Excel 讀取日期數(shù)據(jù),它會(huì)返回一個(gè) datetime 對(duì)象,你可以根據(jù)需要進(jìn)行格式化。
3. 大文件性能
對(duì)于包含數(shù)萬(wàn)甚至數(shù)十萬(wàn)行數(shù)據(jù)的大型 Excel 文件,直接讀寫可能會(huì)比較慢并占用大量?jī)?nèi)存。openpyxl 提供了 read_only 模式用于快速讀取和 write_only 模式用于快速寫入。對(duì)于新手,可以暫時(shí)不深入研究,但在處理大文件時(shí)請(qǐng)記住這些選項(xiàng)。
4. 保存文件時(shí)覆蓋
wb.save("文件名.xlsx") 操作會(huì)覆蓋同名文件,請(qǐng)務(wù)必小心。在修改現(xiàn)有文件時(shí),最好先保存為新的文件名,確認(rèn)無(wú)誤后再考慮覆蓋。
更多高級(jí)操作方向
本文只是介紹了 openpyxl 的基礎(chǔ)功能,你可以進(jìn)一步探索:
- 使用 Pandas 處理數(shù)據(jù):結(jié)合 Pandas 庫(kù)可以更高效地進(jìn)行數(shù)據(jù)清洗、分析和轉(zhuǎn)換,然后將結(jié)果寫入 Excel。
- 創(chuàng)建圖表:
openpyxl也可以用來(lái)在 Excel 中創(chuàng)建各種圖表(如柱狀圖、折線圖)。 - 操作公式:讀取或?qū)懭?Excel 公式。
- 數(shù)據(jù)驗(yàn)證:設(shè)置單元格的數(shù)據(jù)驗(yàn)證規(guī)則。
- 條件格式:根據(jù)條件自動(dòng)設(shè)置單元格格式。
- 使用
xlwings:如果你需要在 Windows 上直接控制已打開的 Excel 應(yīng)用程序,或者需要與 Excel VBA 宏交互,xlwings是一個(gè)強(qiáng)大的選擇。
總結(jié)與展望
通過(guò)本篇文章的學(xué)習(xí),你已經(jīng)掌握了使用 Python openpyxl 庫(kù)自動(dòng)化操作 Excel 的基本技能,包括創(chuàng)建、讀寫、修改、插入/刪除行和列以及設(shè)置基礎(chǔ)樣式。這些技能足以幫助你解決日常工作中大部分的重復(fù)性 Excel 任務(wù)。
Python 自動(dòng)化 Excel 的世界廣闊而充滿可能,它將你的數(shù)據(jù)處理能力提升到一個(gè)新的水平。不要停止探索,嘗試將你學(xué)到的知識(shí)應(yīng)用到實(shí)際工作中,你會(huì)發(fā)現(xiàn)你的工作效率將得到顯著提升!
現(xiàn)在,是時(shí)候告別重復(fù)勞動(dòng),讓 Python 成為你的得力助手,讓數(shù)據(jù)處理飛起來(lái)吧!
以上就是Python實(shí)現(xiàn)自動(dòng)化操作Excel的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Python自動(dòng)化操作Excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python使用Random隨機(jī)生成列表的方法實(shí)例
在日常的生活工作和系統(tǒng)游戲等設(shè)計(jì)和制作時(shí),經(jīng)常會(huì)碰到產(chǎn)生隨機(jī)數(shù),用來(lái)解決問題,下面這篇文章主要給大家介紹了關(guān)于python使用Random隨機(jī)生成列表的相關(guān)資料,需要的朋友可以參考下2022-04-04
pytorch中torch.stack()函數(shù)用法解讀
這篇文章主要介紹了pytorch中torch.stack()函數(shù)用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04
Python matplotlib繪制實(shí)時(shí)數(shù)據(jù)動(dòng)畫
Matplotlib作為Python的2D繪圖庫(kù),它以各種硬拷貝格式和跨平臺(tái)的交互式環(huán)境生成出版質(zhì)量級(jí)別的圖形。本文將利用Matplotlib庫(kù)繪制實(shí)時(shí)數(shù)據(jù)動(dòng)畫,感興趣的可以了解一下2022-03-03
2021年值得向Python開發(fā)者推薦的VS Code擴(kuò)展插件
這篇文章主要介紹了2021年值得向Python開發(fā)者推薦的VS Code擴(kuò)展插件,幫助大家更好的利用vscode進(jìn)行python的開發(fā),感興趣的朋友可以了解下2021-01-01
python文件生成exe之在pycharm使用pyinstaller指令方式
在PyCharm中使用PyInstaller打包Python文件成可執(zhí)行文件(.exe)的步驟,首先,在PyCharm中安裝PyInstaller插件,然后打開項(xiàng)目的設(shè)置,添加PyInstaller插件,接著,在終端中導(dǎo)航到Python文件所在目錄,使用pip安裝PyInstaller,最后使用命令行生成可執(zhí)行文件2026-03-03
淺談Django自定義模板標(biāo)簽template_tags的用處
這篇文章主要介紹了淺談Django自定義模板標(biāo)簽template_tags的用處,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
python實(shí)現(xiàn)異步回調(diào)機(jī)制代碼分享
本文介紹了python實(shí)現(xiàn)異步回調(diào)機(jī)制的功能,大家參考使用吧2014-01-01
對(duì)Python 網(wǎng)絡(luò)設(shè)備巡檢腳本的實(shí)例講解
下面小編就為大家分享一篇對(duì)Python 網(wǎng)絡(luò)設(shè)備巡檢腳本的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Pandas在數(shù)據(jù)分析和機(jī)器學(xué)習(xí)中的應(yīng)用及優(yōu)勢(shì)
Pandas是Python中用于數(shù)據(jù)處理和數(shù)據(jù)分析的庫(kù),它提供了靈活的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)操作工具,包括Series和DataFrame等。Pandas還支持大量數(shù)據(jù)操作和數(shù)據(jù)分析功能,包括數(shù)據(jù)清洗、轉(zhuǎn)換、篩選、聚合、透視表、時(shí)間序列分析等2023-04-04

