目錄
1:openpyxl模塊介紹
openpyxl模塊是一個讀寫Excel 2010文檔的Python庫,如果要處理更早格式的Excel文檔,需要用到其它庫(如:xlrd、xlwt等),這是openpyxl比較其他模塊的不足之處。openpyxl是一款比較綜合的工具,不僅能夠同時讀取和修改Excel文檔,而且可以對Excel文件內單元格進行詳細設置,包括單元格樣式等內容,甚至還支持圖表插入、打印設置等內容,使用openpyxl可以讀寫xltm, xltx, xlsm, xlsx等類型的文件,且可以處理數據量較大的Excel文件,跨平臺處理大量數據是其它模塊沒法相比的。因此,openpyxl成爲處理Excel複雜問題的首選庫函數。
在使用openpyxl前先要掌握三個對象:
1:Workbook(工作簿,一個包含多個Sheet的Excel文件)。
2:Worksheet(工作表,一個Workbook有多個Worksheet,表名識別,如“Sheet1”,“Sheet2”等)。
3:Cell(單元格,存儲具體的數據對象)三個對象。
2: openpyxl模塊安裝
pip install openpyxl
具體安裝步驟參看這個:第三方模塊庫安裝
3:openpyxl模塊常用操作
3.1:獲取工作表
# encoding=gbk
import openpyxl
# 打開Book工作簿
workBook = openpyxl.load_workbook('../test.xlsx')
# 查看工作簿對象中所有的屬性與方法
# print(help(workBook))
# 獲取所有的工作表名
print(workBook.sheetnames) # ['Sheet1', 'Sheet2', 'Sheet3']
print(workBook.get_sheet_names()) # ['Sheet1', 'Sheet2', 'Sheet3']
# 獲取所有的工作表
print(workBook.worksheets) # 返回一個列表
# 獲取某個工作表
# 1:獲取當前激活的工作表
workSheet = workBook.active
# 2:通過下標獲取工作表
workSheet = workBook.worksheets[0]
# 獲取工作表的索引
# print(workBook.index(workSheet))
# print(workBook.get_index(workSheet))
# 3:通過工作表名獲取
workSheet = workBook.get_sheet_by_name('Sheet1')
3.2:行操作
# encoding=gbk
import openpyxl
# 打開Book工作簿
workBook = openpyxl.load_workbook('../test.xlsx')
# 查看工作簿對象中所有的屬性與方法
# print(help(workBook))
# 獲取某個工作表
# 1:獲取當前激活的工作表
# workSheet = workBook.active
# 2:通過下標獲取工作表
# workSheet = workBook.worksheets[0]
# 3:通過工作表名獲取
workSheet = workBook.get_sheet_by_name('Sheet1')
# 查看工作表中的方法與屬性
print(help(workSheet))
print(workSheet.min_row) # 有數據的最小行索引
print(workSheet.max_row) # 有數據的最大行索引
# 獲取所有的行:從1行1列開始,到有數據的最大行(workSheet.max_row),最大列(workSheet.max_column);
print(workSheet.rows) # generator object
for row in workSheet.rows:
print(row[0],row[0].value) # row[0]: 某行對應的第一列的單元格,row[0].value 單元格中的值
# 可以通過指定開始行列,結束行列的範圍來獲取所需要的行
for row in workSheet.iter_rows(min_row=3, min_col=1,max_col = workSheet.max_column, max_row = workSheet.max_row):
print(row[0], row[0].value) # row[0] 行對應的第一列的單元格,row[0].value 單元格中的值
3.3:列操作
# encoding=gbk
import openpyxl
# 打開Book工作簿
workBook = openpyxl.load_workbook('../test.xlsx')
# 查看工作簿對象中所有的屬性與方法
# print(help(workBook))
# 獲取某個工作表
# 1:獲取當前激活的工作表
# workSheet = workBook.active
# 2:通過下標獲取工作表
# workSheet = workBook.worksheets[0]
# 3:通過工作表名獲取
workSheet = workBook.get_sheet_by_name('Sheet1')
# 查看工作表中的方法與屬性
print(help(workSheet))
print(workSheet.min_column) # 有數據的最小列索引
print(workSheet.max_column) # 有數據的最大列索引
# 獲取所有的行:從1行1列開始,到有數據的最大行(workSheet.max_row),最大列(workSheet.max_column);
print(workSheet.columns) # generator object
for col in workSheet.columns:
print(col[0],col[0].value) # col[0]: 某列對應的第一行的單元格,col[0].value 單元格中的值
print('*'*60)
# 可以通過指定開始行列,結束行列的範圍來獲取所需要的列
for col in workSheet.iter_cols(min_row=3, min_col=2,max_col = workSheet.max_column, max_row = workSheet.max_row):
print(col[0], col[0].value) # col[0] 列對應的第一行的單元格,col[0].value 單元格中的值
3.4:單元格操作
# encoding=gbk
import openpyxl
# 打開Book工作簿
workBook = openpyxl.load_workbook('../test.xlsx')
# 查看工作簿對象中所有的屬性與方法
# print(help(workBook))
# 獲取某個工作表
# 1:獲取當前激活的工作表
# workSheet = workBook.active
# 2:通過下標獲取工作表
# workSheet = workBook.worksheets[0]
# 3:通過工作表名獲取
workSheet = workBook.get_sheet_by_name('Sheet1')
# 查看工作表中的方法與屬性
# print(help(workSheet))
# 1:可以通過上面的行操作,列操作,獲取單元格的內容,及重新設置單元格的內容
# 2:通過如下方式獲取,重新設置單元格的內容
print(workSheet['A1'].value)
workSheet['A1'].value = '1234';
# 3: 通過 cell(self, row, column, value=None) 獲取,設置
print(workSheet.cell(1,1).value) # 不提供value,返回單元格
print(workSheet.cell(1,1,200).value) # 提供value,首先重置單元格內容,再返回單元格
workBook.save('test_1.xlsx');
3.5:寫excel文件,合併單元格,樣式處理,設置公式等
# encoding=gbk
import openpyxl
# 一:打開Book工作簿,或創建工作簿
workBook = openpyxl.load_workbook('../test.xlsx') # 在已有的excel文件基礎上進行操作
# workBook = openpyxl.Workbook() # 創建新的文件來操作
# 查看工作簿對象中所有的屬性與方法
# print(help(workBook))
# 二:獲取某個工作表,或新創建工作表
# 1:獲取當前激活的工作表
# workSheet = workBook.active
# 2:通過下標獲取工作表
# workSheet = workBook.worksheets[0]
# 3:通過工作表名獲取
# workSheet = workBook.get_sheet_by_name('Sheet1') # 在已有的工作表上進行操作
workSheet = workBook.create_sheet('Sheet_test',0) # 創建新的工作表,第二個參數爲插入的位置
# 查看工作表中的方法與屬性
# print(help(workSheet))
# 三:給單元格賦值,設置公式
# 1:可以通過上面的行操作,列操作,獲取單元格的內容,及重新設置單元格的內容
# 2:通過如下方式獲取,重新設置單元格的內容
print(workSheet['A1'].value)
workSheet['A1'].value = '1234';
# 3: 通過 cell(self, row, column, value=None) 獲取,設置
print(workSheet.cell(1,1).value) # 不提供value,返回單元格
print(workSheet.cell(1,1,300).value) # 提供value,首先重置單元格內容,再返回單元格
print(workSheet.cell(2,1,200).value)
# 給單元格設置公式:爲單元格設置公式的方式與設置普通值是一樣的。
workSheet['A3'] = '=SUM(A1:A2)'
# 四:合併單元格
# merge_cells(self, range_string=None, start_row=None, start_column=None, end_row=None, end_column=None)
print(workSheet.merge_cells(start_row=2,start_column=2,end_row=5,end_column=4))
workSheet.cell(2, 2).value = 'hello' # 給合併之後的單元格賦值
workSheet.merge_cells('A8:C10')
workSheet['A8'].value = 'A8-88';
# 取消合併
# unmerge_cells(self, range_string=None, start_row=None, start_column=None, end_row=None, end_column=None)
# 五:樣式
# 導入庫
from openpyxl.styles import Font, colors, Alignment
# 樣式--->字體
bold_itatic_24_font = Font(name='等線', size=24, italic=True, color=colors.RED, bold=True)
workSheet['A8'].font = bold_itatic_24_font
# 樣式--->對齊方式:也是直接使用cell的屬性aligment,這裏指定垂直居中和水平居中。除了center,還可以使用right、left等參數
# 設置B1中的數據垂直居中和水平居中
workSheet['A8'].alignment = Alignment(horizontal='center', vertical='center')
# 樣式--->設置行高和列寬
# 第2行行高
workSheet.row_dimensions[2].height = 40
# C列列寬
workSheet.column_dimensions['C'].width = 30
# 樣式--->改變 sheet 標籤按鈕顏色
workSheet.sheet_properties.tabColor = "0000ff"
workBook.save('test_1.xlsx');