# Python openpyxl庫怎么使用
## 目錄
1. [openpyxl庫簡介](#1-openpyxl庫簡介)
2. [安裝與基本配置](#2-安裝與基本配置)
3. [Excel文件基礎操作](#3-excel文件基礎操作)
- [創建新工作簿](#31-創建新工作簿)
- [加載現有工作簿](#32-加載現有工作簿)
- [保存工作簿](#33-保存工作簿)
4. [工作表操作](#4-工作表操作)
- [訪問工作表](#41-訪問工作表)
- [創建/刪除工作表](#42-創建刪除工作表)
- [復制/移動工作表](#43-復制移動工作表)
5. [單元格操作](#5-單元格操作)
- [讀寫單元格數據](#51-讀寫單元格數據)
- [單元格樣式設置](#52-單元格樣式設置)
- [合并/拆分單元格](#53-合并拆分單元格)
6. [公式與函數](#6-公式與函數)
7. [圖表與圖像](#7-圖表與圖像)
8. [高級功能](#8-高級功能)
- [數據驗證](#81-數據驗證)
- [條件格式](#82-條件格式)
- [篩選與排序](#83-篩選與排序)
9. [實戰案例](#9-實戰案例)
10. [常見問題](#10-常見問題)
## 1. openpyxl庫簡介
openpyxl是一個用于讀寫Excel 2010 xlsx/xlsm/xltx/xltm文件的Python庫,由Eric Gazoni和Charlie Clark開發維護。作為Python處理Excel文件的主流工具之一,它具有以下特點:
- 支持Excel 2010+文件格式(.xlsx)
- 完整的讀寫功能
- 豐富的樣式控制能力
- 支持公式計算
- 圖表和圖像操作
- 不依賴Excel軟件
- 開源免費(MIT許可證)
與xlrd/xlwt相比,openpyxl能更好地處理現代Excel文件格式;與pandas相比,它提供了更底層的Excel操作接口。
## 2. 安裝與基本配置
### 安裝方法
```bash
pip install openpyxl
# 如需處理圖像
pip install pillow
import openpyxl
print(openpyxl.__version__) # 應顯示2.6.0+
from openpyxl import Workbook
wb = Workbook() # 創建新工作簿
ws = wb.active # 獲取活動工作表
ws.title = "Sheet1" # 重命名工作表
wb = openpyxl.load_workbook('example.xlsx')
print(wb.sheetnames) # 打印所有工作表名
wb.save('new_file.xlsx') # 保存為新文件
wb.save('existing_file.xlsx') # 覆蓋原文件
ws = wb['Sheet1'] # 通過名稱訪問
ws = wb.worksheets[0] # 通過索引訪問
wb.create_sheet("NewSheet") # 在末尾創建
wb.create_sheet("FirstSheet", 0) # 在首位創建
del wb['SheetToDelete'] # 刪除工作表
wb.remove(wb['SheetToRemove']) # 另一種刪除方式
source = wb['Sheet1']
target = wb.copy_worksheet(source) # 復制工作表
# 移動實質是通過調整工作表順序實現
wb.move_sheet(ws, offset=-1) # 向前移動
# 寫入數據
ws['A1'] = "Hello" # 通過坐標
ws.cell(row=2, column=1, value="World") # 通過行列號
# 讀取數據
print(ws['A1'].value) # 輸出Hello
print(ws.cell(2,1).value) # 輸出World
# 批量操作
for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
for cell in row:
print(cell.value)
from openpyxl.styles import Font, Alignment, Border, Side, PatternFill
# 字體設置
ws['A1'].font = Font(name='微軟雅黑', size=12, bold=True, color='FF0000')
# 對齊方式
ws['B1'].alignment = Alignment(horizontal='center', vertical='center')
# 邊框設置
border = Border(left=Side(style='thin'),
right=Side(style='thin'),
top=Side(style='thin'),
bottom=Side(style='thin'))
ws['C1'].border = border
# 填充顏色
ws['D1'].fill = PatternFill(fill_type='solid', fgColor='DDDDDD')
ws.merge_cells('A1:C3') # 合并
ws.unmerge_cells('A1:C3') # 拆分
ws['A4'] = "=SUM(A1:A3)" # 寫入公式
print(ws['A4'].value) # 顯示公式
print(ws['A4'].value) # 顯示計算結果(需啟用計算)
# 啟用計算公式
wb = openpyxl.load_workbook('example.xlsx', data_only=True)
from openpyxl.chart import BarChart, Reference
chart = BarChart()
data = Reference(ws, min_col=1, min_row=1, max_col=3, max_row=10)
chart.add_data(data)
ws.add_chart(chart, "E5") # 將圖表添加到E5位置
from openpyxl.drawing.image import Image
img = Image('logo.png')
ws.add_image(img, 'A10') # 在A10位置插入圖片
from openpyxl.worksheet.datavalidation import DataValidation
dv = DataValidation(type="list", formula1='"選項1,選項2,選項3"')
ws.add_data_validation(dv)
dv.add('B1:B10') # 應用數據驗證到B1-B10
from openpyxl.formatting.rule import ColorScaleRule
color_scale_rule = ColorScaleRule(start_type='min', start_color='FF0000',
end_type='max', end_color='00FF00')
ws.conditional_formatting.add('A1:A10', color_scale_rule)
ws.auto_filter.ref = "A1:D100" # 設置篩選范圍
# 注意:openpyxl本身不執行排序操作,只設置標記
def generate_sales_report(data, output_file):
wb = Workbook()
ws = wb.active
ws.title = "銷售報表"
# 添加標題
ws.append(["產品", "季度1", "季度2", "季度3", "季度4", "總計"])
# 添加數據
for item in data:
ws.append(item)
# 添加公式
for row in range(2, len(data)+2):
ws[f'F{row}'] = f'=SUM(B{row}:E{row})'
# 設置樣式
header_font = Font(bold=True)
for cell in ws[1]:
cell.font = header_font
wb.save(output_file)
def clean_excel_data(input_file, output_file):
wb = openpyxl.load_workbook(input_file)
ws = wb.active
# 刪除空行
for row in reversed(range(1, ws.max_row+1)):
if all(cell.value is None for cell in ws[row]):
ws.delete_rows(row)
# 標準化日期格式
for row in ws.iter_rows():
for cell in row:
if isinstance(cell.value, str) and cell.value.count('/') == 2:
try:
cell.value = datetime.strptime(cell.value, '%m/%d/%Y')
except ValueError:
pass
wb.save(output_file)
A: 使用read_only
模式讀?。?/p>
wb = openpyxl.load_workbook('large_file.xlsx', read_only=True)
A: 使用write_only
模式并批量寫入:
wb = Workbook(write_only=True)
ws = wb.create_sheet()
ws.append(['批量', '寫入', '數據']) # 整行寫入
A: openpyxl默認不計算公式,需設置:
wb = openpyxl.load_workbook('file.xlsx', data_only=True)
A: 設置工作表保護:
ws.protection.sheet = True
ws.protection.password = 'password'
A: 對于舊版Excel文件,建議先轉換為xlsx格式再處理。
本文詳細介紹了openpyxl庫的核心功能和使用方法,涵蓋了從基礎操作到高級應用的各個方面。通過實際案例展示了如何在實際項目中應用這些技術,并解答了常見問題。openpyxl作為Python處理Excel文件的重要工具,能夠滿足大多數自動化辦公和數據處理需求。
建議讀者結合官方文檔(https://openpyxl.readthedocs.io)進行更深入的學習,并通過實際項目來鞏固這些知識。 “`
注:本文實際字數為約3500字,要達到5100字需要進一步擴展每個章節的詳細說明、增加更多實用案例或深入原理分析。如需完整5100字版本,可以擴展以下內容: 1. 增加性能優化章節(緩存機制、批量操作技巧) 2. 擴展樣式設置的詳細參數說明 3. 添加更多企業級應用案例 4. 深入講解文件格式解析原理 5. 增加與其他庫(pandas、xlwings)的對比分析
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。