python – openpyxl

Share This Post

使用 Python 的 openpyxl 第三方函式庫,讀取並顯示 Office Excel 活頁簿內容以及基本資訊 ( 工作表名稱、最大列數和行數…等 )。

安裝 openpyxl

輸入下列指令,就能安裝 openpyxl 函式庫,依據個人的作業環境使用 pip 或 pip3 ( Google Colab 和 Anaconda Jupyter 已經內建安裝 openpyxl )。

pip3 install openpyxl

載入 openpyxl 函式庫後,使用 load_workbook 方法開啟 Excel 試算表,就能讀取所有工作表的名稱以及各個工作表的內容 ( 垂直方向為 row 列,水平方向為 columne 行 )。

import os
path = os.path.dirname(__file__) + '/'     # Excel放置的路徑

import openpyxl    #載入 openpyxl 函式庫
wb = openpyxl.load_workbook(path + 'test.xlsx')     # 開啟 Excel 檔案

names = wb.sheetnames    # 讀取 Excel 裡所有工作表名稱
s1 = wb['工作表1']          # 取得工作表名稱為「工作表1」的內容
s2 = wb.active           # 取得開啟試算表後立刻顯示的工作表 ( 範例為工作表 1 )

print(names)
# 印出 title ( 工作表名稱 )、max_row 最大列數、max_column 最大行數
print(s1.title, s1.max_row, s1.max_column)
print(s2.title, s2.max_row, s2.max_column)

讀取儲存格內容

能使用兩種方法讀取儲存格的內容,第一種方法直接使用字典的方式,讀取特定名稱的儲存格並取出內容,第二種方法使用 cell(row, column) 的方式,讀取特定行列的儲存格內容,下方的程式碼執行後,會讀取工作表 1 的 A1 儲存格,以及工作表 2 的 B2 儲存格。

import os
path = os.path.dirname(__file__) + '/'     # Excel放置的路徑

import openpyxl    #載入 openpyxl 函式庫
wb = openpyxl.load_workbook(path + 'test.xlsx')     # 開啟 Excel 檔案

s1 = wb['工作表1']

print(s1['A1'].value)        # 取出 A1 的內容
print(s1.cell(1, 1).value)   # 等同取出 A1 的內容
print(s1['B2'].value)        # 取出 B2 的內容
print(s1.cell(2, 2).value)   # 等同取出 B2 的內容

要一次顯示工作表所有的內容,可以定義一個函式,將讀取到的資料轉換成二維串列的形式 ( 讀取到的資料為二維的 tuple 格式 )。

def get_values(sheet):
    arr = []                      # 第一層串列
    for row in sheet:
        arr2 = []                 # 第二層串列
        for column in row:
            arr2.append(column.value)  # 寫入內容
        arr.append(arr2)
    return arr

print(get_values(s1))       # 印出工作表 1 所有內容

如果只想取出某個範圍的資料,可以透過 iter_rows 方法,輸入起始 row、columne 以及結束的 row、 column,就能取出範圍中的內容。

v = s1.iter_rows(min_row=1, min_col=1, max_col=2, max_row=2)  # 取出四格內容
print(v)
for i in v:
    for j in i:
        print(j.value)

轉換儲存格座標與名稱

載入 openpyxl.utils 的 get_column_letter 和 column_index_from_string 模組,就可以將 column 的英文代號轉換成數字,或將數字轉換成英文代號。

import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string

print(column_index_from_string('A'))    # 1
print(column_index_from_string('AA'))   # 27

print(get_column_letter(5))             # E
print(get_column_letter(100))           # CV

訂閱研究文章

Get updates and learn from the best

More To Explore

Scroll to Top

hurry up !

軟體工程師培訓

限時免費報名中

藉由與「真實世界軟體專案」相同的技術、工具與開發流程,化簡成與商業機密無關、門檻較低更容易上手的「模擬專案」,讓你有機會在職場前輩的陪伴下,完成真槍實彈的練習,動手解決真實的問題,快速累積個人的經驗與作品,而不只是「學習技術」而已。