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() 函式的關鍵字引數:

關鍵字引數資料型別說明
sizeint字型大小
italicbool是否為斜體
boldbool是否為粗體
underlinestr底線樣式(例如 “single”、“double” 等)
vertAlignstr垂直對齊方式(例如 “subscript”、“superscript” 等)
strikebool是否為刪除線
colorstr字型顏色(例如 “#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 物件,並設定其名稱、大小和樣式。然後,我們將這個字型套用到儲存格 A1B3

設定公式

您可以使用 = 符號來設定 Excel 檔案的公式。以下是設定公式的範例:

from openpyxl import Workbook

wb = Workbook()
sheet = wb['Sheet']

# 設定公式
sheet['B9'] = '=SUM(B1:B8)'

wb.save('writeFormula3.xlsx')

在這個範例中,我們設定了一個公式 =SUM(B1:B8),將儲存格 B1B8 的值相加,並將結果存放在儲存格 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_dimensionscolumn_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支援建立條形圖、線圖、散點圖和餅圖等圖表。以下是建立圖表的步驟:

  1. 建立一個Reference物件,指定圖表資料的單元格範圍。
  2. 建立一個Series物件,指定圖表的標題和資料。
  3. 建立一個Chart物件,指定圖表的型別和標題。
  4. 將Series物件追加到Chart物件中。
  5. 將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 檔案處理,可搭配其他更高效的函式庫,例如 xlwingspyxlsb,或者採用分批處理的策略,以降低記憶體負載。展望未來,隨著資料分析和自動化需求的持續增長,openpyxl 仍需持續最佳化效能,並強化與其他資料科學工具的整合,才能在競爭激烈的技術生態中保持其重要地位。玄貓認為,openpyxl 作為一個功能豐富且易於上手的 Excel 處理工具,值得 Python 開發者深入學習和應用。