【python】openpyxl常用方法

openpyxl 是一個用於處理 xlsx 格式Excel表格文件的第三方python庫,其支持Excel表格絕大多數基本操作。

安裝方法

使用 pip 或通過專門python IDE(如pyCharm)進行安裝

其中pip安裝方法,命令行輸入: pip install openpyxl

基本使用

第一步先是要導入 openpyxl 模塊

import openpyxl

讀取Excel文檔

通過調用方法**load_workbook(filename)**進行文件讀取,該方法中還有一個read_only參數用於設置文件打開方式,默認爲可讀可寫,該方法最終將返回一個workbook的數據對象

# 文件必須是xlsx格式,如果是其他格式在執行前可利用win32輔助轉化
wb = openpyxl.load_workbook(‘example.xlsx’)

(一)獲取工作表

每一個Excel表格中都會有很多張sheet工作表,在對錶格操作前需要先選定一張工作表

# 獲取所有工作表名(返回一個列表)
sheets = wb.get_sheet_names()

# 獲取某一特定的工作表
sheet = wb.get_sheet_by_name('Sheet2')

# 獲取工作表的表名
sheet_name = sheet.title

# 一般來說,表格大多數用到的是打開時顯示的工作表,這時可以用active來獲取當前工作表
sheet = wb.active

(二)獲取單元格

對Excel表格的操作最終都落於對單元格的操作,獲取單元格有兩種獲取方法:sheet[列行名]sheet.cell(row,column)

# 通過sheet[列行名]獲取
a = sheet['A2']

# 通過sheet.cell(row,column)獲取
b = sheet.cell(1, 2)  # 即sheet['B1']

# 獲取單元格內容
print(a.value)

# 獲取單元格所在列和行
print(‘a is+str((a.column,a.row)))

需要注意的是,sheet.cell(row,column)中參數分別是行和列,且必須爲整數,如果列爲英文字母,可以利用 openpyxl.utils 中的 column_index_from_string**(char)進行字母數字的轉化。順便一說,同理也可以利用get_column_letter(number)**進行數字字母間的轉化

from openpyxl.utils import get_column_letter, column_index_from_string

# 對列進行字母/數字轉化
c_num = column_index_from_string('B')  # c_num = 2
c_char = get_column_letter(5)          # c_char = 'E‘

(三)獲取行和列

在處理Excel表格有時可能需要對錶格進行遍歷查找,openpyxl中便提供了一個行和列的生成器**(sheet.rowssheet.columns)**,這兩個生成器裏面是每一行(或列)的數據,每一行(或列)又由一個tuple包裹,藉此可以很方便地完成對行和列的遍歷

# 對行進行遍歷,輸出A1,B1,C1
for row in sheet.rows:
    for cell in row:
        print(cell.value)

# 對列進行遍歷,輸出A1,A2,A3
for column in sheet.columns:
    for cell in column:
        print(cell.value)

學習時還發現也可以通過**list(sheet.rows)index**對某一行或列進行遍歷,而在此值得注意的是,由於sheet.rows(或sheet.columns)是生成器類型,是不能直接調用的,需將其轉化爲一個list類型,然後再通過索引遍歷

# 對某一特定的行進行遍歷
for cell in list(sheet.rows)[0]:
    print(cell.value)

同時,也可以通過使用**sheet[行列值:行列值]**來對給定單元格範圍進行遍歷

# 對某一單元格範圍進行遍歷
for spaces in sheet['A1':'B2']:
    for cell in spaces:
        print(cell.value)

另外,有時候我們還可能需要確定表格的大小,即獲取表格行和列的最大值,可以用max_rowmax_column來獲取

# 獲得最大列和最大行
print(sheet.max_row)
print(sheet.max_column)

寫入Excel文檔

在開頭讀取時已經介紹,默認的打開方式爲可讀可寫,那麼使用**load_workbook(filename)讀取Excel文檔後也就可以直接寫入了。另外,如果需要新建一個Excel文件,可以使用Workbook()方法,同時它會自動提供一個sheet工作表。對於刪除一個工作表,則可以使用workbook對象的remove(sheet)**方法刪除

# 新建一個Excel文檔
wb = openpyxl.Workbook()

# 刪除某個工作表 
wb.remove(sheet)

(一)寫入單元格

獲取工作表和之前一樣,如果使用**load_workbook(filename)**讀取,那麼獲取工作表後可以直接通過sheet[行列值]寫入單元格。學習時,有資料介紹還可以傳入Excel中的公式進行賦值,不過要注意,在讀取文件時需要加上參數**data_only=True**,這樣才能返回數字,否則將返回字符串,即公式本身

# 直接賦值
sheet['A1'].value = 2

# 公式賦值
sheet['A6'].value = '=SUM(A1:A5)'

另外,也可使用**sheet.append(parameters)**一行或多行寫入

# 寫入一行
row = [1 ,2, 3, 4, 5]
sheet.append(row)

# 寫入多行
rows = [
    ['ID', 'Name', 'Department'],
    ['001', 'Lee','CS'],
    ['002', 'John','MA'],
    ['003', 'Amy','IS']
]
sheet.append(rows)

(二)保存文件

寫完文件後,使用workbook.save(path+filename)進行保存,不過要注意文件擴展名一定要是xlsx格式

# 保存文件至當前目錄
wb.save('new_file.xlsx')

設置單元格樣式

單元格樣式主要包括字體、邊框、顏色以及對齊方式等,這些均位於openpyxl.styles庫中

# 導入字體、邊框、顏色以及對齊方式相關庫
from openpyxl.styles import Font, Border, Side, PatternFill, colors, Alignment

(一)字體

通過sheet單元格font屬性設置字體風格

# 設置字體風格爲Times New Roman,大小爲16,粗體、斜體,顏色藍色
sheet['A1'].font = Font(name='Times New Roman', size=16, bold=True, italic=True, color=colors.BLUE)

(二)對齊方式

通過sheet單元格alignment屬性設置文本對齊風格

# 通過參數horizontal和vertical來設置文字在單元格里的對齊方式,此外設置值還可爲left和right
sheet['B1'].alignment = Alignment(horizontal='center',vertical='center')

(三)邊框

通過sheet單元格border屬性設置字體風格

# 首先設置邊框四個方向的線條種類
left, right, top, bottom = [Side(style='thin', color='000000')] * 4
# 再將各方向線條作爲參數傳入Border方法
sheet['C1'].border = Border(left=left, right=right, top=top, bottom=bottom)

(四)設置行高和列寬

行和列的長度大小可以通過row_dimensions[序號].heightcolumn_dimensions[標號].width來設置

# 設置行高
sheet.row_dimensions[1].height = 25

# 設置列寬
sheet.column_dimensions['D'].width = 15.5

(五)合併和拆分單元格

對單元格的合併與拆分,主要是通過sheet的**merge_cells(args1:args2)unmerge_cells(args1:args2)**兩個方法來實現的

# 合併單元格
sheet.merge_cells('A1:B2')

# 拆分單元格
sheet.unmerge_cells('A1:B2')

當然,除了對角矩形區域化合並,也可以對一行或一列進行合併,只需相應修改參數即可。不過,這裏要注意的是,合併後單元格顯示的文本內容是合併前最左上角單元格的內容,而其他單元格內容則會自動清除。


更多關於openpyxl的介紹,可以參閱readthedocs相關文檔Openpyxl Documentation

轉載自:https://www.cnblogs.com/Unikfox/p/9124767.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章