Python讀寫excle之openpyxl
1.1、模塊介紹
Python處理excel常見的的第三方庫有:xlrd,xlwt,openpyxl,xlsxwriter 等。

xlrd:用于讀取Excle數據文件將返回的數據對象放到內存中,然后查詢數據文件對象的相關信息。只支持xls格式。
xlwt:創建一個全新的excel文件,然后對這個文件進行寫入內容以及保存。支持寫入.xls文件,不支持.xlsx格式。
openpyxl:擁有讀和寫excel的能力,讀寫功能可以滿足大部分的excel操作需求。需要注意的是openpyxl不支持xls文件,保存是覆蓋并顯示新文件。
pandas:結合了數據處理和Excel文件寫入功能,需要依賴numpy和xlrd/openpyxl庫。
1.2、openpyxl操作方法匯總
需要注意的是使用openpyxl進行工作的時候,當一個工作結束的時候我們需要進行Excel文件的保存操作:wb.save('Mytest.xlsx')。這個保存唯一需要注意的是:文件是默認替換的。也就是說我們在保存文件的時候,openpyxl將進行替換而不發出告警。如果大家想保存不同階段的文件,則可以在保存文件的時候加一個時間戳。
from openpyxl import Workbook
# 創建一個工作簿對象
wb = Workbook()
# 在索引為0的位置創建一個名為mySheet的sheet頁
ws = wb.create_sheet('mySheet',0)
# 對sheet頁設置一個顏色(16位的RGB顏色)
ws.sheet_properties.tabColor = 'ff72BA'
# 將創建的工作簿保存為ftz.xlsx
wb.save('ftz.xlsx')
# 最后關閉文件
wb.close()
from openpyxl import load_workbook
# 加載工作簿
wb2 = load_workbook('ftz.xlsx')
# 獲取所有sheet頁名字
print(wb2.get_sheet_names())
print(wb2.sheetnames)
# 獲取sheet頁
ws2 = wb2['mySheet']
ws3 = wb2.get_sheet_by_name('mySheet')
# 打印sheet頁的顏色屬性值
print('color:',ws2.sheet_properties.tabColor)
wb2.close()
#修改工作表名稱
sheet.title="ftz"
#獲取工作表名稱
sheet.title
獲取單元格對象和值
from openpyxl import load_workbook
# 加載工作簿
wb2 = load_workbook('ftz.xlsx')
# 獲取sheet頁
ws2 = wb2.get_sheet_by_name('mySheet')
#獲取單元格對象
cellIns1 = ws2.cell(1,1)
cellIns2 = ws2['A1']
#獲取單元格的值
cellValue1 = cellIns1.value
cellValue2 = cellIns2.value
print(cellValue1)
print(cellValue2)
wb2.close()
往單元格寫入值
#方式一
ws2.cell(5,1).value="海南"
ws2.cell(5,2).value="三亞"
#方式二
ws2["A6"]="北京"
ws2["B6"]="天安門"
#方式三s
ws2.cell(7,1,"山東")
ws2.cell(7,2,"趵突泉")
#保存工作簿
wb2.save("ftz.xlsx")
獲取工作表的最大行和最大列
#獲取最大行:
ws2.max_row
#獲取最大列:
ws2.max_column
獲取多個單元格
#獲取A1到A3的單元格
cell1=ws2['A1:A3']
#獲取第一行和第二行的單元格
cell2=ws2[1:2]
#獲取A列到C列的單元格
cell3=ws2['A:B']
print(cell1[0][0].value,cell1[1][0].value)
print(cell2)
print(cell3)
插入刪除行列
'''
#插入行
ws2.insert_rows(idx=數字編號,amount=要插入行數)
#刪除行
ws2.delete_rows(idx=數字編號,amount=要插入行數)
#插入列
ws2.insert_cols(idx=數字編號,amount=要插入列數)
#刪除列
ws2.delete_cols(idx=數字編號,amount=要插入列數)
'''
#從第二行開始插入三行
ws2.insert_rows(idx=2,amount=3)
wb2.save('ftz.xlsx')
示例代碼:
newExcel = r"D:\FTZ\year\5month\kw_ftz\BYTE.xlsx" if os.path.exists(newExcel): #文件存在則載入存在的文件 workBook = openpyxl.load_workbook(filename = newExcel) else: #文件不存在則創建新的文件,并將默認的sheet重命名 workBook = openpyxl.Workbook() defaultWorkSheet = workBook.active defaultWorkSheet.title = "BYTE" #選擇要操作的sheet頁 worksheet = workBook.get_sheet_by_name("BYTE") #獲取要操作的sheet #寫入 for row in range(0,len(result)): worksheet.append(result[row]) #result是一個列表,表示要寫入的內容 workBook.save(filename=newExcel) #保存
============================================================================================
1.3、xlrd操作方法匯總
注意:在使用 xlrd 讀取 .xlsx 文件時,由于 xlrd 從版本 2.0.0 開始停止支持 .xlsx 格式,可能會遇到 xlrd.biffh.XLRDError: Excel xlsx file; not supported 的錯誤。
如果需要讀取.xlsx文件,你可能需要安裝1.2.0版本的xlrd。
# coding:utf-8
import xlrd
workbook = xlrd.open_workbook(r'./code/excelRead/test.xls')
#print(workbook)
# 獲取所有的工作表名
sheet_names = workbook.sheet_names()
#print(sheet_names)
# 獲取所有的sheet對象
Sheets = workbook.sheets()
print(Sheets)
# 方式一:通過索引選取
sheet1 = workbook.sheets()[0]
print(sheet1 ) # Sheet 0:<sdxl>
# 方式二:通過索引選取
sheet2 = workbook.sheet_by_index(2)
print(sheet2) # Sheet 2:<sdyxz>
# 方式三:通過表名選取,返回一個<class 'xlrd.sheet.Sheet'>對象
sheet = workbook.sheet_by_name("hzgg")
print(sheet) # Sheet 1:<hzgg>
# 通過索引,檢查某個sheet是否導入完畢
print(workbook.sheet_loaded(0)) # True
# 通過文件名,檢查某個sheet是否導入完畢
print(workbook.sheet_loaded("hzgg")) # True
對行(row)的操作
sheet.row_len(rowx) #通過row_len()方法獲取行長度
sheet.row_values(rowx, start_colx=0, end_colx=None) #返回該行的值數據列表
對列(colnum)的操作
sheet.col_len(colx) #通過col_len()方法獲取列長度
sheet.col_values(colx, start_rowx=0, end_rowx=None) #返回該列的值數據列表
對單元格的操作
sheet.cell_value(rowx,colx) #返回該單元格的數值
sheet.cell_type(rowx,colx) #返回該單元格的數據類型
1.4、xlwt操作方法匯總
新建工作簿
xlsx = xlwt.Workbook( encoding="utf-8" ) # 新建Workbook對象,參數為設置編碼為utf-8
添加工作表
sheet = xlsx.add_sheet( "sheet1", cell_overwrite_ok=True )
創建一個sheet對象,一個sheet對象對應Excel文件中的一張工作表
參數:工作表名稱;是否允許覆蓋寫入,默認為False,如果為False,如果在代碼中對同一單元格多次寫入時會報錯
設置單元格寬度
sheet.col(0).width = 256 * num
設置第一列的寬度,num為字符的個數,256為單個字符的寬度
寫入單元格
sheet.write( i, j, content, style )
寫入第i行第j列的單元格(從0開始計數),style為實現設定的單元格樣式,詳見單元格樣式說明
合并單元格寫入
sheet.write_merge( topRow, bottomRow, leftCol, rightCol, content, style )
保存工作簿
xlsx.save( path )
寫入的內容必須與工作簿的編碼一致,否則在保存的時候會報錯,比如,設置編碼為utf-8,那么所有寫入的內容都必須是utf-8的編碼
單元格樣式說明
alignment = xlwt.Alignment() #新建alignment
alignment.horz = xlwt.Alignment.HORZ_CENTER #設置行居中
alignment.vert = xlwt.Alignment.VERT_CENTER #設置列居中
alignment.wrap = xlwt.Alignment.WRAP_AT_RIGHT #設置自動換行
font = xlwt.Font() #新建font
font.bold = True #字體加粗
font.height = 12 * 20,12號的字體 #設置字體大小
font.name = "SimSun" #設置為宋體
borders = xlwt.Borders() #新建borders
borders.left = xlwt.Borders.THIN #設置表格寬度
style = xlwt.XFStyle() #新建style
style.alignment = alignment #為style設置alignment
style.font = font #為style設置font
style.borders = borders #為style設置borders
5、常用讀寫庫介紹
python在操作excel的時候,用到很多庫,常用的有xlwings、xlrd、xlwt、xlutils、xlsxwriter、openpyxl、pandas。這幾個庫都是第三方庫,需要install和import才能使用
xlrd和xlwt是早期支持操作excel的庫,目前最新版本都只支持xls格式,不支持xlsx格式文件。xlrd負責讀取excel文件,xlwt負責對excel進行寫的操作。xlwt 和 xlrd 不光名字像,連很多函數和操作格式也是完全相同。xlrd和xlwt不支持xlxs的原因:XLSX 是 Microsoft Office 2007 之后的 Excel 文件格式,它采用了基于 XML 的文件結構。與之前的 XLS 格式相比,XLSX 格式有更好的擴展性和兼容性。然而,xlrd 庫是基于舊的二進制 XLS 文件格式開發的,因此無法直接讀取 XLSX 文件。
xlutils(excel utilities)是一個提供了許多操作修改 excel 文件方法的庫。xlutils 庫也僅僅是通過復制一個副本進行操作后保存一個新文件,xlutils 庫就像是 xlrd 庫和 xlwt 庫之間的一座橋梁,因此,xlutils 庫是依賴于 xlrd 和 xlwt 兩個庫的。簡單來說,xlrd 負責讀、xlwt 負責寫、xlutils 負責提供輔助和銜接
xlwings 能夠非常方便的讀寫 Excel 文件中的數據,并且能夠進行單元格格式的修改
openpyxl通過 工作簿 “workbook - 工作表 sheet - 單元格 cell” 的模式對 .xlsx 文件進行讀、寫、改,并且可以調整樣式。它是由于缺乏從 Python 中讀取 / 編寫 Office Open XML 格式的現有庫而誕生的。
pandas 是基于 NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。Pandas 納入了大量庫和一些標準的數據模型,提供了高效地操作大型數據集所需的工具
xlsxwriter是用于創建 Excel XLSX 文件的 Python 模塊,可用于將文本、數字、公式和超鏈接寫入 Excel2007 + XLSX 文件中的多個工作表。它可以用于將文本、數字和公式寫入多個工作表,并支持格式、圖像、圖表、頁面設置、自動篩選、條件格式和許多其他功能

一般的組合使用Pandas和openpyxl庫是相互互補的。Pandas絕對是Python中處理Excel最快、最好用的庫,但是使用 openpyxl 的一些優勢是能夠輕松地使用樣式、條件格式等自定義電子表格
————————————————
原文鏈接:
https://blog.csdn.net/liyue121100132/article/details/143143252
https://blog.csdn.net/qq_27071221/article/details/124822548
無腦使用模板:
獲取單元格對象和值 from openpyxl import load_workbook # 加載工作簿 wb2 = load_workbook('ftz.xlsx') # 獲取sheet頁 ws2 = wb2.get_sheet_by_name('mySheet') #獲取單元格對象 cellIns1 = ws2.cell(1,1) cellIns2 = ws2['A1'] #獲取單元格的值 cellValue1 = cellIns1.value cellValue2 = cellIns2.value print(cellValue1) print(cellValue2) wb2.close()
努力,才能證明自己啥也不是。。。

浙公網安備 33010602011771號