【Python基礎】python使用openpyxl操作excel
1、openpyxl庫介紹
openpyxl最好用的python操作excel表格庫,不接受反駁; openpyxl官網鏈接:openpyxl官網 openpyxl只支持【.xlsx / .xlsm / .xltx / .xltm】格式的文件;
2、python怎么打開及讀取表格內容?
1)Excel表格述語
這里需要大家仔細查看圖中的每一項內容,知道什么是“行(row)、列(column)”?什么是“格子(cell)”?什么是“sheet表”?
2)打開Excel表格并獲取表格名稱
from openpyxl import load_workbookworkbook = load_workbook(filename = "test.xlsx")workbook.sheetnames
結果如下:
3)通過sheet名稱獲取表格
from openpyxl import load_workbookworkbook = load_workbook(filename = "test.xlsx")workbook.sheetnamessheet = workbook["Sheet1"]print(sheet)
結果如下:
4)獲取表格的尺寸大小
這里所說的尺寸大小,指的是excel表格中的數(shù)據(jù)有幾行幾列,針對的是不同的sheet而言。
sheet.dimensions結果如下:
5)獲取表格內某個格子的數(shù)據(jù)
① sheet["A1"]方式
workbook = load_workbook(filename = "test.xlsx")sheet = workbook.activeprint(sheet)cell1 = sheet["A1"]cell2 = sheet["C11"]print(cell1.value, cell2.value)"""workbook.active 打開激活的表格;sheet["A1"] 獲取A1格子的數(shù)據(jù);cell.value 獲取格子中的值;"""
結果如下:
② sheet.cell(row=, column=)方式
這種方式更簡單,大家可以對比這兩種方式;
workbook = load_workbook(filename = "test.xlsx")sheet = workbook.activeprint(sheet)cell1 = sheet.cell(row = 1,column = 1)cell2 = sheet.cell(row = 11,column = 3)print(cell1.value, cell2.value)
結果如下:
6)獲取某個格子的行數(shù)、列數(shù)、坐標
workbook = load_workbook(filename = "test.xlsx")sheet = workbook.activeprint(sheet)cell1 = sheet["A1"]cell2 = sheet["C11"]print(cell1.value, cell1.row, cell1.column, cell1.coordinate)print(cell2.value, cell2.row, cell2.column, cell2.coordinate)""".row 獲取某個格子的行數(shù);.columns 獲取某個格子的列數(shù);.corordinate 獲取某個格子的坐標;"""
結果如下:
7)獲取一系列格子
① sheet[]方式
workbook = load_workbook(filename = "test.xlsx")sheet = workbook.activeprint(sheet)# 獲取A1:C2區(qū)域的值cell = sheet["A1:C2"]print(cell)for i in cell:for j in i:print(j.value)
結果如下:
特別的:如果我們只想獲取“A列”,或者獲取“A-C列”,可以采取如下方式:
sheet["A"] --- 獲取A列的數(shù)據(jù)sheet["A:C"] --- 獲取A,B,C三列的數(shù)據(jù)sheet[5] --- 只獲取第5行的數(shù)據(jù)
② .iter_rows()方式
當然有.iter_rows()方式,肯定也會有.iter_cols()方式,只不過一個是按行讀取,一個是按列讀取。
workbook = load_workbook(filename = "test.xlsx")sheet = workbook.activeprint(sheet)# 按行獲取值for i in sheet.iter_rows(min_row=2, max_row=5, min_col=1, max_col=2):for j in i:print(j.value)# 按列獲取值for i in sheet.iter_cols(min_row=2, max_row=5, min_col=1, max_col=2):for j in i:print(j.value)
結果如下:
③ sheet.rows()
幫助我們獲取所有行
workbook = load_workbook(filename = "test.xlsx")sheet = workbook.activeprint(sheet)for i in sheet.rows:print(i)
結果如下:
3、python如何向excel中寫入某些內容?
1)修改表格中的內容
① 向某個格子中寫入內容并保存
workbook = load_workbook(filename = "test.xlsx")sheet = workbook.activeprint(sheet)sheet["A1"] = "哈嘍" # 這句代碼也可以改為cell = sheet["A1"] cell.value = "哈嘍"workbook.save(filename = "哈嘍.xlsx")"""注意:我們將“A1”單元格的數(shù)據(jù)改為了“哈嘍”,并另存為了“哈嘍.xlsx”文件。如果我們保存的時候,不修改表名,相當于直接修改源文件;"""
結果如下:
② .append():向表格中插入行數(shù)據(jù)
.append()方式:會在表格已有的數(shù)據(jù)后面,增添這些數(shù)(按行插入); 這個操作很有用,爬蟲得到的數(shù)據(jù),可以使用該方式保存成Excel文件;
workbook = load_workbook(filename = "test.xlsx")sheet = workbook.activeprint(sheet)data = [["唐僧","男","180cm"],["孫悟空","男","188cm"],["豬八戒","男","175cm"],["沙僧","男","176cm"],]for row in data:sheet.append(row)workbook.save(filename = "test.xlsx")
結果如下:
③ 在python中使用excel函數(shù)公式(很有用)
# 這是我們在excel中輸入的公式=IF(RIGHT(C2,2)="cm",C2,SUBSTITUTE(C2,"m","")*100&"cm")# 那么,在python中怎么插入excel公式呢?workbook = load_workbook(filename = "test.xlsx")sheet = workbook.activeprint(sheet)sheet["D1"] = "標準身高"for i in range(2,16):sheet["D{}".format(i)] = '=IF(RIGHT(C{},2)="cm",C{},SUBSTITUTE(C{},"m","")*100&"cm")'.format(i,i,i)workbook.save(filename = "test.xlsx")
結果如下:
此時,你肯定會好奇,python究竟支持寫哪些“excel函數(shù)公式”呢?我們可以使用如下操作查看一下。
import openpyxlfrom openpyxl.utils import FORMULAEprint(FORMULAE)
結果如下:
④ .insert_cols()和.insert_rows():插入空行和空列
.insert_cols(idx=數(shù)字編號, amount=要插入的列數(shù)),插入的位置是在idx列數(shù)的左側插入; .insert_rows(idx=數(shù)字編號, amount=要插入的行數(shù)),插入的行數(shù)是在idx行數(shù)的下方插入;
workbook = load_workbook(filename = "test.xlsx")sheet = workbook.activeprint(sheet)sheet.insert_cols(idx=4,amount=2)sheet.insert_rows(idx=5,amount=4)workbook.save(filename = "test.xlsx")
結果如下:
⑤ .delete_rows()和.delete_cols():刪除行和列
.delete_rows(idx=數(shù)字編號, amount=要刪除的行數(shù)) .delete_cols(idx=數(shù)字編號, amount=要刪除的列數(shù))
workbook = load_workbook(filename = "test.xlsx")sheet = workbook.activeprint(sheet)# 刪除第一列,第一行sheet.delete_cols(idx=1)sheet.delete_rows(idx=1)workbook.save(filename = "test.xlsx")
結果如下:
⑥ .move_range():移動格子
.move_range("數(shù)據(jù)區(qū)域",rows=,cols=):正整數(shù)為向下或向右、負整數(shù)為向左或向上;
# 向左移動兩列,向下移動兩行sheet.move_range("C1:D4",rows=2,cols=-1)
演示效果如下:
⑦ .create_sheet():創(chuàng)建新的sheet表格
.create_sheet("新的sheet名"):創(chuàng)建一個新的sheet表;
workbook = load_workbook(filename = "test.xlsx")sheet = workbook.activeprint(sheet)workbook.create_sheet("我是一個新的sheet")print(workbook.sheetnames)workbook.save(filename = "test.xlsx")
結果如下:
⑧ .remove():刪除某個sheet表
.remove("sheet名"):刪除某個sheet表;
workbook = load_workbook(filename = "test.xlsx")sheet = workbook.activeprint(workbook.sheetnames)# 這個相當于激活的這個sheet表,激活狀態(tài)下,才可以操作;sheet = workbook['我是一個新的sheet']print(sheet)workbook.remove(sheet)print(workbook.sheetnames)workbook.save(filename = "test.xlsx")
結果如下:
⑨ .copy_worksheet():復制一個sheet表到另外一張excel表
這個操作的實質,就是復制某個excel表中的sheet表,然后將文件存儲到另外一張excel表中;
workbook = load_workbook(filename = "a.xlsx")sheet = workbook.activeprint("a.xlsx中有這幾個sheet表",workbook.sheetnames)sheet = workbook['姓名']workbook.copy_worksheet(sheet)workbook.save(filename = "test.xlsx")
結果如下:
⑩ sheet.title:修改sheet表的名稱
.title = "新的sheet表名"
workbook = load_workbook(filename = "a.xlsx")sheet = workbook.activeprint(sheet)sheet.title = "我是修改后的sheet名"print(sheet)
結果如下:
? 創(chuàng)建新的excel表格文件
from openpyxl import Workbookworkbook = Workbook()sheet = workbook.activesheet.title = "表格1"workbook.save(filename = "新建的excel表格")
結果如下:
? sheet.freeze_panes:凍結窗口
.freeze_panes = "單元格"
workbook = load_workbook(filename = "花園.xlsx")sheet = workbook.activeprint(sheet)sheet.freeze_panes = "C3"workbook.save(filename = "花園.xlsx")"""凍結窗口以后,你可以打開源文件,進行檢驗;"""
結果如下:
? sheet.auto_filter.ref:給表格添加“篩選器”
.auto_filter.ref = sheet.dimension 給所有字段添加篩選器; .auto_filter.ref = "A1" 給A1這個格子添加“篩選器”,就是給第一列添加“篩選器”;
workbook = load_workbook(filename = "花園.xlsx")sheet = workbook.activeprint(sheet)sheet.auto_filter.ref = sheet["A1"]workbook.save(filename = "花園.xlsx")
結果如下:
4、批量調整字體和樣式
1)修改字體樣式
Font(name=字體名稱,size=字體大小,bold=是否加粗,italic=是否斜體,color=字體顏色)
from openpyxl.styles import Fontfrom openpyxl import load_workbookworkbook = load_workbook(filename="花園.xlsx")sheet = workbook.activecell = sheet["A1"]font = Font(name="微軟雅黑",size=20,bold=True,italic=True,color="FF0000")cell.font = fontworkbook.save(filename = "花園.xlsx")"""這個color是RGB的16進制表示,自己下去百度學習;"""
結果如下:
2)獲取表格中格子的字體樣式
from openpyxl.styles import Fontfrom openpyxl import load_workbookworkbook = load_workbook(filename="花園.xlsx")sheet = workbook.activecell = sheet["A2"]font = cell.fontprint(font.name, font.size, font.bold, font.italic, font.color)
結果如下:
3)設置對齊樣式
Alignment(horizontal=水平對齊模式,vertical=垂直對齊模式,text_rotation=旋轉角度,wrap_text=是否自動換行) 水平對齊:‘distributed',‘justify',‘center',‘leftfill', ‘centerContinuous',‘right,‘general'; 垂直對齊:‘bottom',‘distributed',‘justify',‘center',‘top';
from openpyxl.styles import Alignmentfrom openpyxl import load_workbookworkbook = load_workbook(filename="花園.xlsx")sheet = workbook.activecell = sheet["A1"]alignment = Alignment(horizontal="center",vertical="center",text_rotation=45,wrap_text=True)cell.alignment = alignmentworkbook.save(filename = "花園.xlsx")
結果如下:
4)設置邊框樣式
Side(style=邊線樣式,color=邊線顏色) Border(left=左邊線樣式,right=右邊線樣式,top=上邊線樣式,bottom=下邊線樣式) style參數(shù)的種類:'double, 'mediumDashDotDot', 'slantDashDot','dashDotDot','dotted','hair', 'mediumDashed, 'dashed', 'dashDot', 'thin','mediumDashDot','medium', 'thick'from openpyxl.styles import Side,Borderfrom
openpyxl import load_workbookworkbook = load_workbook(filename="花園.xlsx")sheet = workbook.activecell = sheet["D6"]side1 = Side(style="thin",color="FF0000")side2 = Side(style="thick",color="FFFF0000")border = Border(left=side1,right=side1,top=side2,bottom=side2)cell.border = borderworkbook.save(filename = "花園.xlsx")
結果如下:
5)設置填充樣式
PatternFill(fill_type=填充樣式,fgColor=填充顏色) GradientFill(stop=(漸變顏色1,漸變顏色2……))
from openpyxl.styles import PatternFill,GradientFillfrom openpyxl import load_workbookworkbook = load_workbook(filename="花園.xlsx")sheet = workbook.activecell_b9 = sheet["B9"]pattern_fill = PatternFill(fill_type="solid",fgColor="99ccff")cell_b9.fill = pattern_fillcell_b10 = sheet["B10"]gradient_fill = GradientFill(stop=("FFFFFF","99ccff","000000"))cell_b10.fill = gradient_fillworkbook.save(filename = "花園.xlsx")
結果如下:
6)設置行高和列寬
.row_dimensions[行編號].height = 行高 .column_dimensions[列編號].width = 列寬
workbook = load_workbook(filename="花園.xlsx")sheet = workbook.active# 設置第1行的高度sheet.row_dimensions[1].height = 50# 設置B列的寬度sheet.column_dimensions["B"].width = 20workbook.save(filename = "花園.xlsx")"""sheet.row_dimensions.height = 50sheet.column_dimensions.width = 30這兩句代碼,是將整個表的行高設置為50,列寬設置為30;"""
結果如下:
7)合并單元格
.merge_cells(待合并的格子編號) .merge_cells(start_row=起始行號,start_column=起始列號,end_row=結束行號,end_column=結束列號)
workbook = load_workbook(filename="花園.xlsx")sheet = workbook.activesheet.merge_cells("C1:D2")sheet.merge_cells(start_row=7,start_column=1,end_row=8,end_column=3)workbook.save(filename = "花園.xlsx")
結果如下:
當然,也有“取消合并單元格”,用法一致。
.unmerge_cells(待合并的格子編號) .unmerge_cells(start_row=起始行號,start_column=起始列號,end_row=結束行號,end_column=結束列號)
往期精彩回顧
本站qq群704220115,加入微信群請掃碼:
評論
圖片
表情
