Python – openpyxl – Process Excel file (1)

內容目錄

簡介

python除了大家熟知的機器學習、爬蟲等功能之外,還可作非常多的事情,就有如本篇要分享的『 操作Excel 』,當然有許多的程式語言都可以做到操作Excel等本地檔案控制,更或是控制Google Sheet(之前有介紹過),但python就是比較輕量化也可以串接視窗程式,那就直接看要怎樣透過python來控制Excel吧。

實作

0.安裝:直接輸入程式碼安裝

pip install openpyxl

1.認識主要關鍵詞:

workbook(活頁簿):也就是一個excel檔案。
worksheet(工作表):一個excel可以有很多個工作表,目前正在觀看或處理的工作表又稱作「活動中的工作表(active sheet)」。
欄(column):工作表中的直欄,以A、B、C…代表。
行(row):工作表中的橫列,以1、2、3…代表。
儲存格(cell):工作表中的每一個都是一個儲存格。

2.建立檔案:

import openpyxl

fn = 'new_excel.xlsx'

wb = openpyxl.Workbook()
wb.save(fn)

這邊我們需要輸入要建立的檔案名稱,並賦予路徑,這邊我就以fn來當作容器,並且使用到『 Workbook() 』類別,並使用其中的『 save(路徑)』函式,即可儲存,如上圖。

3.建立工作列表:

import openpyxl

fn = 'Excel/man.xlsx'

wb = openpyxl.Workbook()
wb.create_sheet("Mysheet1", 1)

wb.save(fn)

創建好檔案後,當然也是可以新增除了預設工作列表以外的表單,程式碼如上,使用『 create_sheet (列表名稱 , 列表位置)』,列表位置跟陣列索引一樣,從0開始,要注意的是,他不像Google Sheet執行完成式會直接看到有新增的動作,本地檔案需要關閉再重新啟動才會看到程式有新增。

4.讀取檔案-工作列表

import openpyxl

fn = 'Excel/man.xlsx'
wb = openpyxl.load_workbook(fn)

print(wb.sheetnames)
print(wb.active)
print(wb.active.title)

透過上列程式碼可以取得我們剛剛新增的Excel所有列表名稱,使用『 sheetnames 』會儲存在一個陣列中。而也可以取得正在開啟的工作列表與其名稱,使用『 active 與 active.title』,如上圖所示。

5.讀取cell

import openpyxl
#import pandas as pd

fn = 'Excel/man.xlsx'
wb = openpyxl.load_workbook(fn)

wb.active = 0
ws = wb.active

print('excel活動工作表: ', ws)

for col in ws:
    for cell in col:
        print(cell.value)

print()
print('A1內容: ', ws['D1'].value)

當然我們最重要的就是要取得Excel中細部cell的值,如上方程式碼,我們先控制要『active』的工作列表,再來透過for-loop來列出這工作列表中的所有資料,但是假如我只想取的某一欄位中的值,也可以使用上方程式碼最後一列的的方式『ws[excel工作列表的名稱].value』即可。

但你看上方使用for-loop印出來的資列看起來有點亂,所以假如想要用整齊的表格來看的話,可以搭配pandas的read_excel()方式來看。如上圖所示。

6.取得工作列表的最大欄列數

import openpyxl

fn = 'Excel/man.xlsx'
wb = openpyxl.load_workbook(fn)

wb.active = 0
ws = wb.active

print('儲存格 欄名', ws['A1'].column)
print('儲存格 列名', ws['A1'].row)
print('儲存格名', ws['A1'].coordinate)

print('工作表有資料最大欄數', ws.max_column)
print('工作表有資料最小欄數', ws.min_column)
print('工作表有資料最大列數', ws.max_row)
print('工作表有資料最小列數', ws.min_row)

這邊我透過程式碼列出該套件可以偵測工作列表中有關欄、列的空間大小的方法,我最常用到的是取得有資料的表個最大值,就如上述的『max_column & max_row 』,如此一來我就可以針對某一欄的最大值來使用for-loop運行,列出該欄、列的所有資料。

小結

本篇介紹比較基本的操作Excel的一些方法,在第二篇會再介紹對Excel操作的更多方法,例如改變儲存格顏色、儲存格公式的使用、移動資料、畫統計圖表等等的進階功能,這篇比較著重於起手勢與讀取的功能。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *