python經過openpyxl操做excel

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
相關文章
相關標籤/搜索