【OpenPyXL】对Excel单元格的操作
OpenPyXL对Excel的操作,大致分三步,把冰箱门打开,把大象放进去....错了,重来:
截图为日语,简单介绍一下:
ワークブック==workbook
ワークシート==worksheet
セル==cell

单一单元格的操作
import openpyxl
wb = openpyxl.load_workbook('openpyxl_practice.xlsx')
ws = wb.active # 「firstsheet」
# 对A1~A3输入值
ws['A1'] = 1
ws['A2'] = 2
ws['A3'] = 3
ws['A4'] = '=SUM(A1:A3)' # 也可以直接输入函数

可以看出来,A4单元格显示就是计算结果了。
我们除了用A1这种方式来指定单元格,还可以通过行数和列数来指定(R1C1形式)。
# R1C1的形式
ws.cell(row = 1, column = 2).value = 4 # B1
ws.cell(row = 2, column = 2).value = 5 # B2
ws.cell(row = 3, column = 2).value = 6 # B3
ws.cell(row = 4, column = 2).value = '=SUM(B1:B3)' # B4
# 下面这种方式也可以
ws.cell(row = 1, column = 3, value = 7) # C1
ws.cell(row = 2, column = 3, value = 8) # C2
ws.cell(row = 3, column = 3, value = 9) # C3
ws.cell(row = 4, column = 3, value = '=SUM(C1:C3)') # C4

# A1的形式
a1 = ws['A1'].value # A1的值取得
print(a1)
# R1C1的形式
r1c1 = ws.cell(row=1, column=2).value # B1的值取得
print(r1c1)
多个单元格的操作
# 同一行中,多个单元格同时输入
datas = ["A5追加", "B5追加", "C5追加"]
ws.append(datas)
# 复数行中,多个单元格同时输入
datas = [
["A6追加", "B6追加", "C6追加"],
["A7追加", "B7追加", "C7追加"],
]
for row_data in datas:
ws.append(row_data)

row = ws[3] # 第3行
print(row)
# 按照行,获取指定单元格数据
print("--- C3的数据 ---")
row = ws[3] # 第3行
print(row[2].value) # C3(值:9)
# 获取整行说有单元格的数据
print("--- 第3行所有的数据 ---")
row = ws[3] # 第3行
for row_data in row:
print(row_data.value)
如果你要获取的是第4行的数据:
row = ws[4] # 第4行
for row_data in row:
print(row_data.value)
你会发现它是把函数直接输出出来了,而不是计算后的结果。
如果想要获取的是计算后的内容该如何处理呢?
我们只需要在加载workbook的时候加入data_only=True就可以了。
import openpyxl
# 如果要获取函数运算后的结果,添加「data_only=True」
wb = openpyxl.load_workbook('openpyxl_practice.xlsx', data_only=True)
ws = wb.active
# 获取有函数的行
row = ws[4] # 第4行
for row_data in row:
print(row_data.value)
需要注意的是,如果你是在一次操作里同时写入函数,然后在后面就获取它的运算结果,你会发现得到的是None,你需要在获取前,先将工作表保存一下才行。
复数行的数据获取:
# 复数行的数据获取
row_range = ws[3:4] # 第3行和第4行
for row_data in row_range: # 遍历每一行
for data in row_data: # 遍历改行的每一列(A3,B3,C3)
print(data.value)
除了上面获取单元格的数据外,还可以通过coordinate获取单元格的位置(如:A1,C3等)
# 复数行的数据获取
row_range = ws['A3:B4'] # A3〜B4
for row_data in row_range: # 第3行
for data in row_data: # 改行的列(A3,B3)
print(data.coordinate, data.value)
获取整列的数据
# 获取整列的数据
col = ws['C'] # C列
for col_data in col:
print(col_data.value)
获取复数列
# 获取复数列
col_range = ws['A:B'] # A列 B列
for col_data in col_range: # 遍历列
for data in col_data: # 遍历该列的每一行的数据
print(data.coordinate, data.value)
获取整个sheet的数据
for row in ws.values:
print(row)
iter_rows()和iter_cols()方法
# 获取A1~C2的值
print("--- 获取整行数据---")
for row in ws.iter_rows(min_row = 1, max_col = 3, max_row = 2, values_only=True):
print(row)
print("--- 每个单元格的数据 ---")
for row in ws.iter_rows(min_row = 1, max_col = 3, max_row = 2, values_only=True):
for data in row:
print(data)
# A1~B4的值
print("--- 获取整列的数据 ---")
for col in ws.iter_cols(min_row = 1, max_col = 2, max_row = 4, values_only=True):
print(col)
print("--- 每个单元格的数据 ---")
for col in ws.iter_cols(min_row = 1, max_col = 2, max_row = 4, values_only=True):
for data in col:
print(data)
ws.max_column:获得最终列
ws.max_row:获得最终行