python 對Excel操做經常使用的主要有xlwt、xlrd、openpyxl ,前者xlwt主要適合於對後綴爲xls比較進行寫入,而openpyxl主要是針對於Excel 2007 以上版本進行操做,也就是對後綴爲xlsx進行操做。python
Excel 主要有三大元素,工做簿,Sheet 頁,單元格,一個工做簿能夠包含多個Sheet頁面,而Sheet頁由N多個單元格組成,而單元格主要用來存儲數據;json
1、安裝插件後端
pip install openpyxl
2、建立Excel文件app
操做excel以前,首先咱們須要建立一個excel ,建立的途徑不少,咱們主要經過openpyxl的方式建立;測試
# 首先須要咱們導入Workbook包
from openpyxl import Workbook excel = Workbook() # 建立excel對象 excel.save("sample.xlsx") # 保存excel
建立方式很簡單,其實就是把沒有的東西保存在指定的位置便可;spa
2、建立Sheet頁插件
1.excel默認建立成功之後會自動建立一個Sheet頁面excel
from openpyxl import Workbook excel = Workbook() # 建立excel對象 excel.create_sheet(title="Sheet1", index=1) # 建立sheet頁面,默認index 的值爲1,可是index是從0開始 excel.save("sample.xlsx") # 保存excel
注意:code
新建sheet 完成之後須要保存,若是不保存是沒法建立成功對象
3、新建excel時寫入測試數據
from openpyxl import Workbook # 寫入操做以前首先咱們須要知道在那個Sheet頁寫入 # 打開默認的Sheet頁面 excel = Workbook() sheet = excel.active # 激活第一個Sheet頁 # excel寫入數據的三種方式 # 指定單元格寫入數據 ws["A1"] = "添加數據方式1" # 指定單元格進行添加數據 # 在當前的sheet頁面中追加一行數據 ws.append([1, 2, 3, 4]) # 在當前sheet頁面追加 # 指定行號,列號,寫入的值 ws.cell(row=1, column=2, value="第一行第二列添加測試數據") # 最重要的寫入數據之後須要保存數據 wk.save("sample.xlsx")
4、操做excel
1.獲取全部的Sheet頁面,修改Sheet名稱,刪除Sheet頁面
excel = load_workbook('sample.xlsx') # 打開文件 # 獲取當前excel的全部sheet 頁 print(excel.sheetnames) # 獲取指定的Sheet頁面 sheet = excel['Sheet'] # 經過sheet_name獲取,經過sheet名稱獲取表 # 獲取當前sheet頁的名稱 print(sheet.title) # 修改 Sheet 名稱 sheet.title = "Sheet_new" # 刪除Sheet頁 excel.remove_sheet(sheet) # 這個方法已經棄用,推薦使用remove 或者del excel["Sheet1"] # 指定刪除的Sheet名稱 excel.remove(sheet) # 先獲取Sheet,而後在刪除 excel.save("sample.xlsx") # 只要修改完成,必須保存excel
2.讀取excel數據
# 首先讀取excel數據的時候咱們須要導入load_workbook from openpyxl import load_workbook # 打開文件 excel = load_workbook('bid.xlsx') # 獲取操做的sheet頁面 sheet1 = excel['Sheet1'] # 經過sheet_name獲取,經過sheet名稱獲取表 sheet2 = excel.active() # 打開默認的sheet頁面 # 讀取單元格的數據 data = table.cell(row=1, column=1).value # 指定行列獲取單元格的數據,還能夠經過循環的方式獲取多個單元格的值 data = table["A1"].value # 指定單元格獲取數據 dataw = table["A1":"C2"] # 獲取多個單元格數據
# 修改單元格數據
data = table["A1"].value = "修改數據方式" # 從新指定單元格的數據
3.獲取表的一些屬性
wb = load_workbook("sample.xlsx") ws = wb.active # 經過返回最大的行數和列數,獲取excel有多少行多少列 rows = ws.max_row # 獲取行數 cols = ws.max_column # 獲取列數 # 直接獲取行數和列數,返回的結果是一個生成器,須要經過元組轉換下 len(tuple(ws.columns)) # 獲取列數 len(tuple(ws.rows)) # 獲取行數
4、實際案例
工做中,須要測試數據須要支持多個數據源,可是我不想改後端的代碼,因此考慮將excel數據處理爲json數據,而後進行處理工做。
def excel2json(file_name): wb = load_workbook(file_name) ws = wb.active result_list = [] head_list = [] for k in tuple(ws.rows)[0]: # excel的第一行數據設置爲字典的key head_list.append(k.value) for rv in tuple(ws.rows)[1:]: # excel 其餘的行爲字典的value value_list = [] for v in rv: value_list.append(v.value) result_list.append(dict(zip(head_list, value_list))) # 兩個列表合併爲字典 return result_list