# python - openpyxl 使用 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 ``` ## [參考](https://steam.oxxostudio.tw/category/python/example/excel-read.html)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.