參考博客:https://www.cnblogs.com/anpengapple/p/6399304.html?utm_source=itdadao&utm_medium=referral
在使用openpyxl模塊前,需要了解openpyx中名稱的概念:
在openpyxl中,主要用到三個概念:Workbooks,Sheets,Cells
Workbook:指一個excel工作表;
Sheet:指工作表中的一張表;
Cell:指表中的一個單元格。
openpyx在讀或寫時順序為:打開Workbook,定位Sheet,操作Cell
openpy常用方法
使用office新建一個xlsx文件。(注意,不要使用Pycharm工具新建,避免出現錯誤。zipfile.BadZipFile: File is not a zip file )
xlsx文件名為:網站新增用戶.xlsx
內容如下:
一、讀取xlsx
from openpyxl import load_workbook #首先導入庫 wb=load_workbook("網站新增用戶.xlsx") #打開xlsx文件 print(wb.sheetnames) #sheetnames是獲取工作表中的所有表的表名,即可查看該xlsx文件里面所有表
sheetname=wb.sheetnames[0] #獲取工作表中的第一張表的表名。注意:get_sheet_names()方法已經停止使用了。繼續使用會進行警告。
#sheet = wb.get_sheet_by_name("表一") 讀取到指定的Sheet(表),注意get_sheet_by_name()方法已經未使用。通過['表名']直接讀取指定的sheet(表)
sheet=wb["表一"] #讀取指定的sheet(表)
'''
獲取指定的sheet表也可以寫成下列方式:
sheetname=wb.sheetnames[0] 獲取工作表中第一張表的表名
sheet=we[sheetname]
'''
注意:get_sheet_by_name()方法已經未使用了,繼續使用會出現警告:DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).

讀取到指定的Sheet(表),sheet就變得神奇了,想要的內容都在這里。比如:
print("A列:",sheet["A"]) #讀取A列 print("1行:",sheet["1"]) #讀取第1行 print("C4格的值:",sheet["C4"].value) #讀取C4格的值 #最大/最小行列數獲取的是表中的數據區域 print("最大行數為:",sheet.max_row) #最大行數 print("最大列數為::",sheet.max_column) #最大列數 print("最小行數為:",sheet.min_row) #最小行數 print("最小列數為:",sheet.min_column) #最大列數 print("第一行第一列的單元格值為:",sheet.cell(row=1,column=1).value) #獲取第一行第一列單元格的值 print("\n") print("表中C列中所有值為:") for i in sheet["C"]: print(i.value, end=" ") # 讀取C列中的所有值 print("\n") print("表中2行中所有值為:") for j in sheet["2"]:
二、寫入xslx
from openpyxl import workbook #導入庫 wb=workbook.Workbook() #創建一個新工作表 sheet=wb.active #找到活動的sheet頁 sheet.title='new sheet' #空的excel表默認的sheet頁就叫Sheet,如果想改名字,可以直接給title屬性賦值 ''' 這個屬性是可讀可寫的。當然,這個只針對當前活動頁,別的頁的話,可以用create_sheet和remove_sheet進行添加和刪除。 往sheet頁里面寫內容就比較簡單了,跟讀一樣. ''' sheet['C3'] = 'Hello world!' for i in range(10): sheet["A%d" % (i+1)].value = i + 1 sheet["E1"].value = "=SUM(A:A)" #我們還可以進行花式操作,比如寫寫公式: wb.save('保存一個新的excel.xlsx') #最后記得保存
執行結果:
注意:上面的寫入操作是新建一個工作表,針對於已有的工作表進行寫入:
from openpyxl import load_workbook fp=load_workbook("保存一個新的excel.xlsx") sheet=fp["new sheet"] sheet['c1']='新寫入的內容' fp.save("保存一個新的excel.xlsx")
針對於已有的工作表進行寫入,需注意以下幾點:
1、在寫入完成后,還是需要通過save方法進行保存,sheetname還是使用該文件名,會自動進行覆蓋。
2、需寫入的表,再打開的狀態下是不能成功執行代碼的,會報錯:PermissionError: [Errno 13] Permission denied
其實這里還是有點小問題的,就是當我先用load_workbook讀取一個excel,修改之后save成原來的文件,會報錯:PermissionError: [Errno 13] Permission denied