前言:需要進行自動化辦公或者自動化測試的朋友,可以瞭解下此文,掌握Python讀取Excel表格的方法。
一、準備工作:
1、安裝Python3.7.0(官網下載安裝包)
2、安裝Pycharm(官網下載安裝包)
3、安裝openpyxl
命令列視窗執行: pip install openpyxl ,出現Successfully installed表示安裝成功。
4、準備一份Excel表格,絕對路徑:D:\zxt\test_data.xlsx , test_data.xlsx內容如下:
二、瞭解幾個常用概念
workbook 工作簿
worksheet 表單
row 行
column 列
cell 單元格
active 活躍的表單(即:正開啟使用的表格)
index 索引 (注意:Excel中的索引值是從1開始!!!)
三、Python讀取Excel
import openpyxl
# 一、開啟工作簿
wb = openpyxl.load_workbook(r"D:\zxt\test_data.xlsx", read_only=False)
# 二、從工作簿中獲取表單
# 1.遍歷表單名稱
for sheet in wb:
print(sheet.title)
print(wb.sheetnames) # 結果是一個列表
# 2.獲取表單物件
mySheet = wb.create_sheet('表單4')
print(wb.sheetnames)
sheet4 = wb['表單4'] # 通過表單名獲取,注意這裡使用方括號
# 三、從表單中取出單元格,並列印單元格的行、列、值
ws = wb.active # 取出活躍的表單
print(ws) # 列印表單
print(ws['A1']) # 列印A1單元格
print(ws['A1'].value) # 列印A1單元格的值
# 1.列印B2單元格的行、列、值
c = ws['B2']
print("B2單元格的行數是{0},列數是{1},值是{2}".format(c.row, c.column, c.value))
print("單元格{0}的值是{1}".format(c.coordinate, c.value)) # c.coordinate表示獲取單元格的座標
# 2.還可以通過指定單元格的行、列索引值,來獲取單元格的值
print(ws.cell(row=2, column=2).value)
for i in range(2, 8, 2):
print(ws.cell(row=i, column=2).value)
for j in range(1, 3):
print(ws.cell(row=2, column=j).value)
# 3.根據指定的行、列範圍列印單元格的值
row6 = ws[6]
print(row6)
columnB = ws['B']
print(columnB)
row_range = ws[1:8] # 採用切片的方法獲取行的範圍
column_range = ws['A:C']
column_index = range(1, 4)
# 利用for迴圈遍歷單元格的值
# 方法1.先取出每一行,再取出每一行中的每一個單元格來獲取值
for row in row_range:
for cell in row:
print(cell.value)
# 方法2.先取出每一列,再取出每一列中的每一個單元格來獲取值
for col in column_range:
for cell in col:
print(cell.value)
# 方法3.通過生成器列印指定矩形區域單元格的值
# 說明:使用iter_rows()和iter_cols()方法更加靈活,可以指定單元格的行、列範圍,返回的是一個生成器。
for row in ws.iter_rows(min_row=1, max_row=8, min_col=1, max_col=2):
for cell in row:
print(cell.value)
for col in ws.iter_cols(min_col=1, max_col=2, min_row=1, max_row=8):
for cell in col:
print(cell.value)
# 方法4.按照單元格的範圍(矩形)區域列印單元格的值
# 先給出單元格的範圍,然後按行取列印每個單元格的值
cell_range = ws['A1:B8']
for rowOfCellObject in cell_range:
for cellObj in rowOfCellObject:
print(cellObj.coordinate, cellObj.value)
# 四、獲取表單的最大行數、最大列數
print("表單1是:{0}*{1}的表格".format(ws.max_row, ws.max_column))
# 五、列對應的數字和字元轉換
# 說明:使用這個轉換功能,我們需要先匯入2個模組
from openpyxl.utils import get_column_letter, column_index_from_string
print(get_column_letter(2), get_column_letter(20), get_column_letter(47))
print(column_index_from_string('AU'), column_index_from_string('AHH'))