基礎知識
工作簿 workbook
表單 worksheet
行 row
列 column
單元格 cell
這裏有個知識—— active
每個工作簿都有很多的工作表,默認是三個,我們把正在操作的那個稱爲活躍表單,也就是active
這個是本文用到的表格文檔
ws = wb.active
# 將活躍的表單賦值然後進行操作,那麼我們當前那張表單在界面前,就是操作的哪一個
正文
導入模塊
import openpyxl
首先打開一個工作簿
# 導入一個Excel文件
wb = openpyxl.load_workbook('demo.xlsx')
查看工作簿中所有工作表的名稱
print(wb.sheetnames)
['Sheet1', 'Sheet2']
- 返回一個列表形式的數據,意味着我們也可以利用索引來操作,由於wb是一個對象,這裏用循環遍歷
for sheet in wb:
print(sheet)
<Worksheet "Sheet1">
<Worksheet "Sheet2">
創建一個新的表單
mySheet = wb.create_sheet('mySheet')
print(wb.sheetnames)
['Sheet1', 'Sheet2', 'mySheet']
操作指定表單
# 第一種:使用 get_sheet_by_name()方法,指定表單名
sheet2 = wb.get_sheet_by_name('Sheet2') # 注意大小寫
# 第二種:直接使用 wb對象 索引表單名
sheet3 = wb['mySheet']
查看指定表單的數據
sheet1 = wb['Sheet1']
print(sheet1)
<Worksheet "Sheet1">
print(sheet1['B2'])
<Cell 'Sheet1'.B2>
print(sheet1['B2'].value)
週一
定位單元格
# 使用索引名稱直接找到單元格
print(sheet1['B2'])
<Cell 'Sheet1'.B2>
print(sheet1['B2'].value)
週一
# 使用Worksheet.cell()方法
# 注意:使用關鍵字參數指定行列,數字默認從1開始
print(sheet1.cell(row=4, column=2))
print(sheet1.cell(row=4, column=2).value)
<Cell 'Sheet1'.B4>
鄭三
查看單元格屬性
cell = sheet1['B3']
print('Row {}, Column {} is {}'.format(cell.row, cell.column, cell.value))
Row 3, Column 2 is 吳二
print('Cell {} is {}'.format(cell.coordinate, cell.value))
Cell B3 is 吳二
打印多行數據
for i in range(1,8): # 也可以指定步數
print(i, sheet1.cell(row=i, column=3).value)
1 2
2 101
3 102
4 103
5 103
6 104
7 104
# 當然循環只是其中一種方法,還有更簡便的,請看下方取整行整列
取整列,取整行
# 直接用索引取出C列的所有數據,得到的cols只是所有單元格的對象,要取值的話,需要遍歷出來value
cols = sheet1['C']
for c in cols:
print(c.value)
2
101
102
103
103
104
104
# 也可以用切片的方式,取出整列的區間
cols_range = sheet1['B:C']
for col in cols_range: # 首先先遍歷出來B列,然後再是C列
for cell in col: # 遍歷單獨一列的每一個單元格的數據
print(cell.value) # 打印單元格的數據
# 這裏結果過長就不再打印
# 取出單行
rows = sheet1[2]
for r in rows:
print(r.value)
A1
週一
101
2018-08-08 00:00:00
# 取出多行數據
rows_range = sheet1[2:5] # 這裏行切片的起始是根據Excel的行號,不是默認從0開始
for col in rows_range:
for cell in col:
print(cell.value)
A1
週一
101
2018-08-08 00:00:00
A2
吳二
102
2018-08-09 00:00:00
A3
鄭三
103
2018-08-10 00:00:00
A3
趙四
103
2018-08-10 00:00:00
使用生成器的方法訪問多行多列
# 關鍵字參數的理解
# min_row 指定起始的行號
# max_row 指定結束的行號
# max_col 指定列的寬度
for rows in sheet1.iter_rows(min_row=1, max_row=2, max_col=3):
for row in rows: # 這裏的rows是一整行的生成器對象
print(row.value)
0
1
2
A1
週一
101
指定一個行列範圍來遍歷取值
# 首先我們定義一個單元格的範圍
cell_range = sheet1['A2:C4']
print(cell_range)
((<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>),
(<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>),
(<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.C4>))
# 可以看到cell_range這個對象中,每一行都單獨成一個元組
for cell_row in cell_range:
for cell in cell_row: # 從每一個單獨的元組中再遍歷,然後輸出單元格的值
print(cell.coordinate, cell.value)
A2 A1
B2 週一
C2 101
A3 A2
B3 吳二
C3 102
A4 A3
B4 鄭三
C4 103
查看工作表的最大行,最大列
print('{} * {}'.format(sheet1.max_row, sheet1.max_column))
7 * 4
將索引進行互相轉化
from openpyxl.utils import get_column_letter, column_index_from_string
print(get_column_letter(2), get_column_letter(10))
B J
print(column_index_from_string('AAJ'))
712