Python – openpyxl – Process Excel file (2)

內容目錄

簡介

繼上篇我們首次介紹到『 openpyxl 』這好用的套件,得知最開頭的用法,例如創建Excel、創建工作分頁、讀取cell內容以及擷取工作列表中的最大最小內容長度,基本上在讀取方面算是很夠用了,不過當我們藉由python程式中處理完的資料想要再回填到Excel中,這就是本篇要介紹的重點。

實作

範例1:修改工作分頁名稱

import openpyxl

workbook = openpyxl.load_workbook("Excel/man.xlsx")

sheet = workbook['Mysheet1']
sheet.title = 'Fruit'
workbook.save("Excel/man.xlsx")

上述的程式碼首先要讀取Excel的路徑+檔名,再選擇我們想要改的分頁名稱放在『 workbook(他是個list儲存所有工作分頁) 』,指定分頁後並把『 title 』改成我們想要修改的名稱,最後做儲存的動作。

範例2:刪除工作分頁

import openpyxl

workbook = openpyxl.load_workbook("Excel/man.xlsx")

sheet = workbook['Fruit']
workbook.remove(sheet)
workbook.save("Excel/man.xlsx")

這邊我就不附上圖片了,程式處理流程跟範例1相同,但這邊我們所使用的函式是『 remove(表單)』,即可以刪除了。

範例3:修改儲存格內容

這個功能可說是本篇重點,在Excel中最重要的就是cell中的內容,可以看到上圖,我想把畫紅線的值透過python做修改。

import openpyxl

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

wb.active = 0
ws = wb.active

#改變方式一
print('B2內容: ', ws['B2'].value)

ws['B2'].value =  180
print('B2內容: ', ws['B2'].value)

#改變方式二
ws.cell(column=3, row=4).value = 70

wb.save(fn) # 若給予不同檔名代表另存新檔的意思

可以看到上方程式碼有兩種修改方式,跟讀取方式有兩種一樣,首先我們使用openpyxl做動作前都是要先將檔案的路徑、工作列表都指定好,接著看到方式一,是透過Excel中的行列『名稱』來做指定,方式二是以『儲存格位置』來做指定,指定完要修改的值之後儲存,即可完成。

可以看到透過上述程式碼,上圖則是跑完程式的結果,馬上就修改完成了。

範例4:合併、解除合併儲存格

在Excel中合併儲存格是非常常見的一個功能,我們也可以透過程式來做合併與解除合併的儲存格,如上圖我們想要將(row 7 , column 2,3)合併一下儲存格。

import openpyxl

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

wb.active = 0
ws = wb.active

ws.merge_cells(start_row=7, start_column=2, end_row=7, end_column=3)
#ws.unmerge_cells(start_row=2, start_column=7, end_row=3, end_column=7)

wb.save(fn) # 若給予不同檔名代表另存新檔的意思

可以看到上述程式碼,合併跟解除合併的函式是使用『 merge_celld 與 unmerge_cells 』,函式名稱也非常直覺,但重點就是引數的輸入,大家可能要清楚認知一下row跟column在你Excel中的位置,其實在讀取或寫入資料時也是要知道row跟column的相對位置。

可以看到上圖透過程式碼即刻完成Excel動作。

範例5:新增、刪除row或是column

import openpyxl

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

wb.active = 0
ws = wb.active

ws.insert_rows(1)
#ws.insert_cols(1, 2)
#ws.delete_rows(1, 2)
#ws.delete_cols(1, 2)

wb.save(fn)

在Excel新增刪除欄、列也是非常常用的動作,可以看到上述程式碼,使用的函式新增有兩種『 insert_rows 與 insert_cols 』,刪除也是有兩種『 delete_rows 與 delete_cols 』,大家都可以透過上方程式碼來試試看。

小結

在透過openpyxl這套件使用過後,一切其實都算是好用,但是最麻煩的還是每次執行完程式碼後,要去看程式碼有沒有起效果,都要將Excel關閉再重開,才可以看到成果,這可以說是這套件最麻煩的地方,也許假如Excel有個refrsh按鈕的話就可以解決這套件的這缺點了,期待總是最美,那我們就繼續介紹該套件的其他功能吧。

發佈留言

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