1. 程式人生 > 實用技巧 >openpyxl模組操作Excel

openpyxl模組操作Excel

1.openpyxl模組瞭解

1.excel版本問題
    03版本之前的excel檔案字尾名xls
        03版本之後的excel檔案字尾名xlsx

2.python操作excel表格的模組
    openpyxl
        針對03版本之前的excel不是太相容
    xlrd(讀)、xlwt(寫)
        相容03版本之前和之後的
 https://www.cnblogs.com/yangmeichong/p/10873920.html
openpyxl其實也是pandas模組操作excel的底層模組

# 下載
pip3 install openpyxl
參考網站:https:
//openpyxl.readthedocs.io/en/stable/

2.Excel檔案生成

from openpyxl import Workbook

# 生成一個excel檔案物件
wb = Workbook()

# 建立工作簿,預設是在sheet後面
# w1 = wb.create_sheet('test')
# wb1 = wb.create_sheet('test',0)  # 還可以指定索引引數調整test位置
# 調整工作簿的位置
w1 = wb.create_sheet('工作簿01',index=0)
w2 = wb.create_sheet('工作簿02')
w3 = wb.create_sheet('
工作簿03') # 二次修改工作簿名稱 w1.title = 'MySheet01' # 儲存檔案 wb.save(r'aaa.xlsx')

3.openpyxl寫資料

w1 = wb.create_sheet('工作簿01',index=0)

# 寫資料方式1
# w1['A1'] = 666
# 寫資料方式2:在第2行第1列寫資料999
# w1.cell(row=2,column=1,value=999)

# 插入公式,注意等號一定要加,還可以寫函式(比如excel支援的求和,求差等很多常見的函式)
# w1['A5'] = '=sum(A1:A2)'

# 建立表字段資料
w1.append(['
序號','姓名','年齡','愛好']) # 新增表單資料 w1.append([1,'jason',18,'read']) w1.append([2,'tony',28,'music']) w1.append([3,'tom',38,'play']) # 資料多了 w1.append([4,'jerry',38,'play','江蘇']) # 沒有列欄位對應 # 資料少了 w1.append([5,48,'run']) """ 針對缺失的資料 用None或者''佔位 """ w1.append([6,None,48,'run']) w1.append([7,'',66,'read']) # 儲存檔案 wb.save(r'bbb.xlsx')

4.openpyxl讀取資料

from openpyxl import load_workbook


wb = load_workbook(r'bbb.xlsx',data_only=True)
#
read_only=True 當讀取一個較大的檔案時,如果不適用這個引數會導致產生“MemoryError”錯誤,檔案都載入到記憶體,導致記憶體空間不足報錯
# wb = load_workbook('1.xlsx',read_only=True,data_only=True)
# 獲取所有工作簿的名稱
# print(wb.sheetnames)  # ['工作簿01', 'Sheet']

# 指定你需要操作的工作簿
w1 = wb['工作簿01']

# 讀取資料方式1
# print(w1['A1'].value)
# 讀取資料方式2
# print(w1.cell(row=2,column=1).value)

# 讀取公式單元格資料    預設只能獲取到公式
# print(w1['A5'].value)  # =sum(A1:A2)
"""如果需要獲取公式計算之後的結果
1.wb = load_workbook(r'aaa.xlsx',data_only=True)
2.針對程式碼生成的excel檔案需要你去操作一下
"""
# 讀行資料
# for row in w1.rows:
#     row_data = [r.value  for r in row]
#     print(row_data)
# 讀列資料
# for col in w1.columns:
#     col_data = [c.value  for c in col]
#     print(col_data)

print(w1.max_row)  # 檢視總共有多少行資料
print(w1.max_column)  # 檢視總共有多少列欄位