Python 的 openpyxl 模組提供便捷的 Excel 檔案處理方式。它能讀取現有檔案、建立新檔案、修改儲存格內容、設定樣式、操作公式、管理工作表,甚至插入圖片和圖表。這使得 openpyxl 成為自動化報表生成、資料分析、批次處理等辦公室自動化任務的利器。熟練運用 openpyxl 可以大幅提升工作效率,減少重複性勞動。
使用 Python 處理 Excel 檔案
Python 的 openpyxl 模組提供了一個方便的方式來讀寫 Excel 檔案。以下是如何使用 openpyxl 來處理 Excel 檔案的範例。
讀取 Excel 檔案
要讀取 Excel 檔案,可以使用 openpyxl.load_workbook() 函式。這個函式會傳回一個 Workbook 物件,代表 Excel 檔案。
import openpyxl
# 載入 Excel 檔案
wb = openpyxl.load_workbook('example.xlsx')
# 選擇第一個工作表
sheet = wb['Sheet1']
# 迭代工作表中的每一行
for row in sheet.rows:
# 迭代每一行中的每一列
for cell in row:
# 顯示每一列的值
print(cell.value)
寫入 Excel 檔案
要寫入 Excel 檔案,可以使用 openpyxl.Workbook() 函式建立一個新的 Workbook 物件。然後,可以使用 sheet.cell() 方法設定每一列的值。
import openpyxl
# 建立一個新的 Workbook 物件
wb = openpyxl.Workbook()
# 選擇第一個工作表
sheet = wb.active
# 設定每一列的值
sheet['A1'] = '姓名'
sheet['B1'] = '年齡'
sheet['A2'] = 'John'
sheet['B2'] = 25
# 儲存 Excel 檔案
wb.save('example.xlsx')
合併儲存格
可以使用 sheet.merge_cells() 方法合併多個儲存格。
import openpyxl
# 建立一個新的 Workbook 物件
wb = openpyxl.Workbook()
# 選擇第一個工作表
sheet = wb.active
# 合併 A1 到 C1 儲存格
sheet.merge_cells('A1:C1')
# 設定合併儲存格的值
sheet['A1'] = '合併儲存格'
# 儲存 Excel 檔案
wb.save('example.xlsx')
插入圖片
可以使用 sheet.add_image() 方法插入圖片。
import openpyxl
# 建立一個新的 Workbook 物件
wb = openpyxl.Workbook()
# 選擇第一個工作表
sheet = wb.active
# 插入圖片
img = openpyxl.drawing.image.Image('image.jpg')
sheet.add_image(img, 'A1')
# 儲存 Excel 檔案
wb.save('example.xlsx')
計算公式
可以使用 sheet.cell() 方法設定計算公式。
import openpyxl
# 建立一個新的 Workbook 物件
wb = openpyxl.Workbook()
# 選擇第一個工作表
sheet = wb.active
# 設定計算公式
sheet['A1'] = '=SUM(B1:B10)'
# 儲存 Excel 檔案
wb.save('example.xlsx')
這些範例展示瞭如何使用 openpyxl 來處理 Excel 檔案。可以使用這些方法來讀取、寫入、合併儲存格、插入圖片和計算公式。
建立和儲存 Excel 檔案
要建立一個新的 Excel 檔案,可以使用 openpyxl.Workbook() 函式。這個函式會傳回一個新的、空白的工作簿物件。
import openpyxl
wb = openpyxl.Workbook()
工作簿一開始會有一個名為 “Sheet” 的工作表,您可以更改工作表的名稱。
sheet = wb.active
sheet.title = 'Spam Bacon Eggs Sheet'
任何時候您修改工作簿物件或其工作表和儲存格,檔案都不會被儲存,直到您呼叫 save() 方法。
wb.save('example3.xlsx')
建立和移除工作表
您可以使用 create_sheet() 方法建立新的工作表,並使用 del 運算元刪除工作表。
wb.create_sheet() # 新增一個新的工作表
del wb['Middle Sheet'] # 刪除一個工作表
寫入儲存格值
寫入儲存格值就像寫入字典中的鍵值一樣。
sheet['A1'] = 'Hello, world!' # 編輯儲存格
print(sheet['A1'].value) # 讀取儲存格值
專案:更新一份試算表
在這個專案中,您將編寫一個程式來更新一份生產銷售試算表中的儲存格。程式將瀏覽試算表,找到特定的生產型別,並更新其價格。
步驟 1:設定一個包含更新資訊的資料結構
price_updates = {
'Celery': 1.19,
'Garlic': 3.07,
'Lemon': 1.27
}
步驟 2:開啟試算表檔案並更新價格
import openpyxl
# 開啟試算表檔案
wb = openpyxl.load_workbook('produceSales3.xlsx')
sheet = wb['Sheet1']
# 瀏覽每一行
for row in range(1, sheet.max_row + 1):
produce_name = sheet.cell(row=row, column=1).value
if produce_name in price_updates:
# 更新價格
sheet.cell(row=row, column=2).value = price_updates[produce_name]
# 儲存更新後的試算表到一個新檔案
wb.save('updated_produce_sales.xlsx')
這個程式將更新生產銷售試算表中的價格,並將更新後的試算表儲存到一個新檔案中。
更新生產成本的 Excel 試算表
在處理大量生產成本資料時,使用 Python 指令碼自動更新試算表可以節省時間並減少人為錯誤。以下是更新生產成本試算表的步驟:
步驟 1:建立更新字典
首先,建立一個字典來儲存更新的生產成本資訊。這樣可以方便地更新成本而不需要修改程式碼。
PRICE_UPDATES = {'Garlic': 3.07,
'Celery': 1.19,
'Lemon': 1.27}
步驟 2:迴圈更新試算表
接下來,迴圈更新試算表中的每一行。如果某行的生產名稱存在於更新字典中,則更新其成本。
for row_num in range(2, sheet.max_row + 1):
produce_name = sheet.cell(row=row_num, column=1).value
if produce_name in PRICE_UPDATES:
sheet.cell(row=row_num, column=2).value = PRICE_UPDATES[produce_name]
步驟 3:儲存更新試算表
最後,儲存更新試算表到一個新檔案中,以避免覆寫原始檔案。
wb.save('updatedProduceSales3.xlsx')
相似程式的想法
此類別程式可以擴充套件到以下應用:
- 從一個試算表讀取資料並寫入到其他試算表中。
- 從網站、文字檔或剪貼簿讀取資料並寫入到試算表中。
- 自動清理試算表中的資料,例如使用正規表示式去除空白字元或統一日期格式。
Plantuml 圖表:更新生產成本試算表流程
圖表翻譯:
此圖表展示了更新生產成本試算表的流程。首先,載入原始試算表。接下來,建立一個更新字典來儲存新的生產成本資訊。然後,迴圈更新試算表中的每一行,如果某行的生產名稱存在於更新字典中,則更新其成本。最後,儲存更新試算表到一個新檔案中。
使用 OpenPyXL 自定義 Excel 中的字型樣式
在 Excel 中,自定義字型樣式可以幫助您強調重要的資料。例如,您可以將某些行或列的文字設為粗體或斜體,以便更容易地識別重要的資訊。
匯入 Font 函式
要自定義字型樣式,您需要從 openpyxl.styles 模組中匯入 Font 函式:
from openpyxl.styles import Font
這樣您就可以使用 Font() 函式來建立字型樣式物件。
建立字型樣式物件
以下範例建立了一個新的工作簿,並將單元格 A1 的字型設為 24 點、斜體:
italic_24_font = Font(size=24, italic=True)
sheet['A1'].font = italic_24_font
sheet['A1'] = 'Hello, world!'
在這個範例中,Font(size=24, italic=True) 傳回一個 Font 物件,我們將其儲存到 italic_24_font 變數中。然後,我們將這個 Font 物件指派給單元格 A1 的 font 屬性,這樣就可以將單元格 A1 的文字設為 24 點、斜體。
Font 函式的關鍵字引數
Font() 函式接受多個關鍵字引數,用於設定字型樣式。以下是 Font() 函式的關鍵字引數:
| 關鍵字引數 | 資料型別 | 說明 |
|---|---|---|
| size | int | 字型大小 |
| italic | bool | 是否為斜體 |
| bold | bool | 是否為粗體 |
| underline | str | 底線樣式(例如 “single”、“double” 等) |
| vertAlign | str | 垂直對齊方式(例如 “subscript”、“superscript” 等) |
| strike | bool | 是否為刪除線 |
| color | str | 字型顏色(例如 “#FF0000” 等) |
您可以使用這些關鍵字引數來設定字型樣式。例如:
font = Font(size=24, italic=True, bold=True, color="#FF0000")
sheet['A1'].font = font
這樣就可以將單元格 A1 的文字設為 24 點、斜體、粗體、紅色。
儲存工作簿
最後,別忘了儲存工作簿:
wb.save('styles3.xlsx')
這樣就可以將您的自定義字型樣式儲存到 Excel 檔案中。
使用 OpenPyXL 設定 Excel 檔案的字型和公式
OpenPyXL 是一個 Python 函式庫,允許您讀寫 Excel 檔案 (.xlsx,.xlsm,.xltx,.xltm)。在本文中,我們將探討如何使用 OpenPyXL 設定 Excel 檔案的字型和公式。
設定字型
您可以使用 Font 類別來設定 Excel 檔案的字型。以下是設定字型的範例:
from openpyxl import Workbook
from openpyxl.styles import Font
wb = Workbook()
sheet = wb['Sheet']
# 設定字型
bold_font = Font(name='Times New Roman', bold=True)
italic_font = Font(size=24, italic=True)
# 將字型套用到儲存格
sheet['A1'].font = bold_font
sheet['A1'] = 'Bold Times New Roman'
sheet['B3'].font = italic_font
sheet['B3'] = '24 pt Italic'
wb.save('styles3.xlsx')
在這個範例中,我們建立了一個 Font 物件,並設定其名稱、大小和樣式。然後,我們將這個字型套用到儲存格 A1 和 B3。
設定公式
您可以使用 = 符號來設定 Excel 檔案的公式。以下是設定公式的範例:
from openpyxl import Workbook
wb = Workbook()
sheet = wb['Sheet']
# 設定公式
sheet['B9'] = '=SUM(B1:B8)'
wb.save('writeFormula3.xlsx')
在這個範例中,我們設定了一個公式 =SUM(B1:B8),將儲存格 B1 至 B8 的值相加,並將結果存放在儲存格 B9。
讀取公式結果
OpenPyXL 不能計算公式結果,但是您可以使用 load_workbook 函式來讀取公式結果。以下是讀取公式結果的範例:
from openpyxl import load_workbook
wb = load_workbook('writeFormula3.xlsx', data_only=True)
sheet = wb['Sheet']
print(sheet['A3'].value) # 輸出:500
在這個範例中,我們使用 load_workbook 函式來讀取 Excel 檔案,並設定 data_only=True 以讀取公式結果。然後,我們可以存取儲存格 A3 的值,得到公式結果。
調整列和行的大小
您可以使用 row_dimensions 和 column_dimensions 屬性來調整列和行的大小。以下是調整列和行的大小的範例:
from openpyxl import Workbook
wb = Workbook()
sheet = wb['Sheet']
# 設定列和行的大小
sheet.row_dimensions[1].height = 70
sheet.column_dimensions['B'].width = 20
wb.save('dimensions3.xlsx')
在這個範例中,我們設定了列和行的大小,並將結果存放在 Excel 檔案中。
合併與取消合併儲存格
您可以使用 merge_cells() 方法將一個矩形群組的儲存格合併成一個單一儲存格。以下是範例程式碼:
import openpyxl
wb = openpyxl.Workbook()
sheet = wb['Sheet']
sheet.merge_cells('A1:D3') # 合併這些儲存格
sheet['A1'] = '十二個儲存格合併在一起。'
sheet.merge_cells('C5:D5') # 合併這兩個儲存格
merge_cells() 方法的引數是一個字串,代表要合併的矩形群組的左上角和右下角儲存格:‘A1:D3’ 將合併 12 個儲存格成一個單一儲存格。要設定合併儲存格的值,只需設定左上角儲存格的值即可。
取消合併儲存格
要取消合併儲存格,可以使用 unmerge_cells() 方法:
sheet['C5'] = '兩個合併的儲存格。'
wb.save('merged3.xlsx')
import openpyxl
wb = openpyxl.load_workbook('merged3.xlsx')
sheet = wb['Sheet']
sheet.unmerge_cells('A1:D3') # 取消合併這些儲存格
如果您儲存變更並檢視電子試算表,您將看到合併儲存格已還原為個別儲存格。
凍結窗格
對於太大而無法一次顯示的電子試算表,凍結幾行或幾列可以幫助使用者始終看到重要的標題,即使他們滾動電子試算表。這些被稱為凍結窗格。
在 openpyxl 中,每個工作表物件都有一個 freeze_panes 屬性,可以設定為一個儲存格物件或一個儲存格座標字串。注意,這個屬性將凍結所有在此儲存格上方的行和在此儲存格左方的列,但不包括此儲存格本身的行和列。要解凍所有窗格,可以將 freeze_panes 設定為 None 或 'A1'。
以下是 freeze_panes 設定的一些範例:
| 凍結窗格設定 | 凍結的行和列 |
|---|---|
sheet.freeze_panes = 'A2' | 凍結第 1 行(不凍結任何列) |
sheet.freeze_panes = 'B1' | 凍結第 1 列(不凍結任何行) |
sheet.freeze_panes = 'C1' | 凍結第 1 和第 2 列(不凍結任何行) |
內容解密:
merge_cells()方法可以合併多個儲存格成一個單一儲存格。unmerge_cells()方法可以取消合併儲存格。freeze_panes屬性可以凍結工作表中的特定行和列。
圖表翻譯:
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Python Openpyxl Excel檔案處理技巧
package "資料視覺化流程" {
package "資料準備" {
component [資料載入] as load
component [資料清洗] as clean
component [資料轉換] as transform
}
package "圖表類型" {
component [折線圖 Line] as line
component [長條圖 Bar] as bar
component [散佈圖 Scatter] as scatter
component [熱力圖 Heatmap] as heatmap
}
package "美化輸出" {
component [樣式設定] as style
component [標籤註解] as label
component [匯出儲存] as export
}
}
load --> clean --> transform
transform --> line
transform --> bar
transform --> scatter
transform --> heatmap
line --> style --> export
bar --> label --> export
note right of scatter
探索變數關係
發現異常值
end note
@enduml圖表解說:
此圖表顯示了合併和取消合併儲存格、以及凍結窗格的流程。首先,使用 merge_cells() 方法合併多個儲存格。然後,設定合併儲存格的值。接下來,使用 unmerge_cells() 方法取消合併儲存格。最後,使用 freeze_panes 屬性凍結工作表中的特定行和列。
使用openpyxl模組進行Excel檔案操作
openpyxl是一個強大的Python模組,允許您讀寫Excel檔案。以下是使用openpyxl進行Excel檔案操作的範例。
凍結窗格
您可以使用freeze_panes屬性來凍結Excel檔案中的窗格。例如:
import openpyxl
wb = openpyxl.load_workbook('produceSales3.xlsx')
sheet = wb.active
# 凍結第一行
sheet.freeze_panes = 'A2'
wb.save('freezeExample3.xlsx')
這將凍結第一行,讓使用者無論如何滾動,都能看到第一行。
建立圖表
openpyxl支援建立條形圖、線圖、散點圖和餅圖等圖表。以下是建立圖表的步驟:
- 建立一個Reference物件,指定圖表資料的單元格範圍。
- 建立一個Series物件,指定圖表的標題和資料。
- 建立一個Chart物件,指定圖表的型別和標題。
- 將Series物件追加到Chart物件中。
- 將Chart物件新增到Worksheet物件中,指定圖表的位置。
以下是建立條形圖的範例:
import openpyxl
wb = openpyxl.Workbook()
sheet = wb.active
# 建立一些資料
for i in range(1, 11):
sheet['A' + str(i)] = i * i
# 建立Reference物件
ref_obj = openpyxl.chart.Reference(sheet, 1, 1, 10, 1)
# 建立Series物件
series_obj = openpyxl.chart.Series(ref_obj, title='My Chart')
# 建立Chart物件
chart_obj = openpyxl.chart.BarChart()
chart_obj.title = 'My Chart'
# 將Series物件追加到Chart物件中
chart_obj.append(series_obj)
# 將Chart物件新增到Worksheet物件中
sheet.add_chart(chart_obj, 'C5')
wb.save('sampleChart3.xlsx')
這將建立一個條形圖,並將其新增到Excel檔案中。
1. openpyxl.load_workbook() 函式傳回什麼?
openpyxl.load_workbook() 函式傳回一個 Workbook 物件,該物件代表 Excel 檔案中的工作簿。
2. wb.sheetnames 工作簿屬性包含什麼?
wb.sheetnames 工作簿屬性包含工作簿中所有工作表的名稱。
3. 如何檢索名為 ‘Sheet1’ 的工作表物件?
可以使用 wb['Sheet1'] 來檢索名為 ‘Sheet1’ 的工作表物件。
4. 如何檢索工作簿的活躍工作表物件?
可以使用 wb.active 來檢索工作簿的活躍工作表物件。
5. 如何檢索 C5 單元格的值?
可以使用 sheet['C5'].value 來檢索 C5 單元格的值。
從技術架構視角來看,Python 的 openpyxl 模組提供了一套完整且易用的 API,方便開發者操作 Excel 檔案。深入分析其核心功能,包含讀寫儲存格、合併儲存格、插入圖片、設定公式、調整樣式等,可以發現 openpyxl 能有效滿足大部分的 Excel 檔案處理需求。然而,openpyxl 在處理大型檔案時,記憶體消耗較大,效能表現可能成為瓶頸。此外,直接使用公式計算需要額外開啟 data_only 模式,並依賴 Excel 軟體本身的計算引擎,這在伺服器環境佈署時可能造成額外複雜度。考量到實務落地,建議針對大型 Excel 檔案處理,可搭配其他更高效的函式庫,例如 xlwings 或 pyxlsb,或者採用分批處理的策略,以降低記憶體負載。展望未來,隨著資料分析和自動化需求的持續增長,openpyxl 仍需持續最佳化效能,並強化與其他資料科學工具的整合,才能在競爭激烈的技術生態中保持其重要地位。玄貓認為,openpyxl 作為一個功能豐富且易於上手的 Excel 處理工具,值得 Python 開發者深入學習和應用。