Home openpyxl 讀寫 Excel(中文)
Post
Cancel

openpyxl 讀寫 Excel(中文)

讀 Excel 的 python lib

Excel 是大家常常拿來整理資料的工具,它非常的方便好用,這邊就不需贅述了。 但如何讀取 Excel 的資料去做更複雜的資料整理?

openpyxlpandas 都可以,以下針對做兩個模組的比較。

openpyxl vs pandas

功能OpenpyxlPandas
讀取速度較慢較快
寫入速度較慢較快
格式支援完整有限
數據處理基本的讀寫操作強大的數據分析和處理功能
圖表支援不支援
公式支援不支援
單元格格式精細控制基本支援
多工作表處理支援支援

Openpyxl 的優點:

  1. 完全支援 Excel 功能:Openpyxl 支援 Excel 的大部分功能,包括讀取和寫入格式、圖表、公式等。
  2. 細節控制:可以更精細地控制單元格的格式、樣式和資料驗證。
  3. size 小: openpyxl 大約 10 MB; pandas 依賴性多(像是 numpy), 大約 100 MB.

考慮到寫完的工具,要導出執行檔給別人使用,因此選擇使用 openpyxl,這樣執行檔的 size 可以大幅下降。

openpyxl 功能介紹

Openpyxl 是一個用於讀取和寫入 Excel 檔案的 Python 庫。它支援 Excel 2010 xlsx/xlsm/xltx/xltm 檔案格式。以下是 openpyxl 的一些主要功能和使用方法介紹:

  1. 讀取 Excel 檔案:可以從現有的 Excel 檔案中讀取數據。
  2. 寫入 Excel 檔案:可以創建新的 Excel 檔案並寫入數據。
  3. 修改 Excel 檔案:可以在現有的 Excel 檔案中添加、刪除或修改數據。
  4. 格式化:支援單元格的格式化,例如字體、顏色、邊框等。
  5. 圖表:可以在 Excel 中創建各種圖表。
  6. 公式:支援讀取和寫入 Excel 公式。
  7. 資料驗證:可以設定單元格的資料驗證規則。

示範讀檔

現在有個 basketball.xlsx 紀錄 NBA 23/24 賽季平均的排行榜,我要使用 openpyxl 將資料輸出

得分 Desktop View

籃板 Desktop View

助攻 Desktop View

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from openpyxl import load_workbook

# Read Excel file
wb = load_workbook('basketball.xlsx')


print("sheets name : ")
sheet_name = wb.sheetnames # get all sheetnames
for name in sheet_name:
    print(name)

print()

ws = wb['得分'] # assign worksheet by sheetname
for row in ws.iter_rows(values_only=True):
    print(row)

print("----------")

ws = wb['籃板']
for row in ws.iter_rows(values_only=True):
    print(row)


print("----------")

ws = wb['助攻']
for row in ws.iter_rows(values_only=True):
    print(row)

Desktop View

程式碼很簡單吧 ! 解釋都在註解中

示範寫檔

現在我們想要在這些球員中找出更出色的球員,也就是那些球員同時出現在得分、籃板、助攻的排行榜上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from openpyxl import load_workbook
import numpy as np

# Read Excel file
wb = load_workbook('basketball.xlsx')

temp = []
sheet_name = wb.sheetnames
for name in sheet_name:
    ws = wb[name]
    # min_row=2 從第 2 個 row 開始讀取, 因為第一個  row 是 header
    for row in ws.iter_rows(min_row=2,values_only=True):
        temp.append(row[1])

names = np.array(temp)

unique_values, counts = np.unique(names, return_counts=True)

# 找出出現次數大於 1 的值
duplicates = unique_values[counts > 1]

# 添加新工作表
ws2 = wb.create_sheet(title="Better player")

# 在新工作表中寫入數據
ws2['A1'] = duplicates[0]
ws2['A2'] = duplicates[1]

# 儲存檔案
wb.save("basketball.xlsx")

Desktop View

以上!

☝ツ☝

This post is licensed under CC BY 4.0 by the author.

👈 ツ 👍