前面章節主要梳理學習了openpyxl的基本操作及單元格樣式設置等相關內容,另外也穿插講解了部分單元格行列操作的知識點。通過實戰項目演示,進一步加深了印象,整個過程我們不難發現,對於使用openpyxl操作Excel文件,行列遍歷及單元格的定位操作是整個過程的重要技巧和先決條件,因此,這節我們著重講解openpyxl對於單元格及行列遍歷的具體操作。
一、單元格及行列操作相關方法
from openpyxl import load_workbook
wb = load_workbook(「test.xlsx」)
ws = wb[wb.sheetnames[0]]
用ws表示工作表實例,後面不再說明。
(一)獲取單元格
總結獲取單元格有兩種方式:
1.ws[行列名] # 列名使用英文字母
2.ws.cell(row, column) # 列名使用數字
列字母數字轉化函數
col_number = openpyxl.utils.column_index_from_string(char)
col_char = openpyxl.utils.get_column_letter(number)
(二)設置單元格的大小(行高和列寬)
# 調整列寬
ws.column_dismensions[『A』].width = 40.0
# 調整行高
ws.row_dismensions[1].height = 60.0
wb.save(「test.xlsx」)
(三)合併\取消合併單元格
ws.merge_cells(「A1:A2」)
ws.cell(1, 1).value = 「合併單元格內容」
ws.unmerge_cells(「A1:D1」)
# 注意設置樣式時只設置左上角單元格的樣式即可
from openpyxl.styles import Font, Alignment
font = Font(name=u』宋體』, size=28, bold = True)
align = Alignment(horizontal=』center』, vertical=』center』)
(四)插入行列
ws.insert_rows(n) # 在第n行插入一行
ws.insert_cols(m,n) # 從第m列開始插入n列
(五)刪除行列
ws.delete_cols(m, n) # 從第m列開始,刪除n列
ws.delete_rows(n) # 刪除第n行
上述兩種方式刪除行(列)後,下(後)面的表格將自動上(前)移。
(六)行列遍歷
處理Excel表格有時(大多數)需要對表格進行遍歷查找,行列遍歷兩種方式:
1.ws.max_row獲得表格的最大行數,取得遍歷次數,使用for循環遍歷
for row in range(2, ws.max_row + 1):
# 一般第一行是表頭,所以從2開始,range()不含右邊界
for cell in row:
print(cell)
2. openpyxl中提供了行列生成器(ws.rows和ws.columns),這兩個生成器裡面存儲了每一行(列)的數據,每一行由一個tuple包裹,便於對行列進行遍。
for row in ws.rows:
for cell in row:
print(cell)
由於ws.rows或ws.columns是生成器類型,不能直接調用,使用時往往將其轉化未list類型,然後索引遍歷獲得某一行(列)的內容
for cell in list(ws.rows)[0]:
print(cell.value)
上面例子列印第一行的內容
此外,還可以使用sheet[行列值: 行列值]來對給定單元格範圍進行遍歷。
for area_date in sheet[『A1』:』H8』]:
for cell in area_date:
print(cell.value)
上面的例子列印A1到H8範圍內的內容
二、綜合實例
我們通過一個實例來回顧下上面的知識點和前面章節的樣式內容。接前幾章的例子,Excel電子表格中創建一個100×100的乘法表,命名為「漂亮的電子表格」,設置背景色為紅色,單元格加上邊框,單元格內容居中顯示,單元格字體設置為「Times New Roman」,大小8,白色。對表格的行列作出如下設置:單數行藍色填充、雙數行黃色填充、行列相等的單元格藍色填充、內容是3的倍數的單元格用紅色填充。在第一行加上標題,題目為「乘法表」,合併單元格使標題居中顯示,標題應用樣式字體「宋體」,大小22,加粗顯示。
不贅述,直接上代碼。
import openpyxl
from openpyxl.styles import PatternFill, Alignment, Border, Side, Font
from openpyxl.styles.colors import RED, BLUE, YELLOW, GREEN, BLACK, WHITE
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "漂亮的電子表格"
ws.sheet_properties.tabColor = RED
font = Font(name="Times New Roman", size=8, color=WHITE)
alignment=Alignment(horizontal='center', vertical='center')
thin = Side(border_style="thin", color=BLACK)
border = Border(top=thin, left=thin, right=thin, bottom=thin)
# 單數行
r_single_fill = PatternFill(fill_type='solid',fgColor=BLUE)
# 雙數行
r_double_fill = PatternFill(fill_type='solid',fgColor=YELLOW)
# 行列相等
r_c_fill = PatternFill(fill_type="solid",fgColor=GREEN)
# 3的倍數
three_fill = PatternFill(fill_type="solid",fgColor=RED)
for r in range(1, 101):
for c in range(1, 101):
cell = ws.cell(row = r, column = c, value = r * c)
cell.font = font
cell.alignment = alignment
cell.border = border
if cell.row % 2 != 0:
cell.fill = r_single_fill
elif cell.row % 2 == 0:
cell.fill = r_double_fill
if cell.row == cell.column:
cell.fill = r_c_fill
if cell.value % 3 == 0:
cell.fill = three_fill
wb.save("test.xlsx")
三、總結展望
怎麼樣,電子表格五顏六色,只有你想不到,沒有python+openpyxl做不到的,因此,只要熟練掌握單元格和行列的操作,你就能定位到任何Excel電子表的位置,然後進行各種設置和統計,是不是很方便?但前提是要熟練掌握哦!
如果我想列印電子表格呢?電子表格頁面如何設置?我們下一章節梳理探討這些問題。