Python函數(shù)入門必備:神奇的Excel自動(dòng)化工具Openpyxl庫,網(wǎng)絡(luò)上一直是零零碎碎的教程,今天我們?yōu)榇蠹铱偨Y(jié)一下:
三大模塊,我們將通過簡(jiǎn)單的實(shí)例來介紹他們的用法:
1、Workbook操作工作簿的模塊(工作簿,一個(gè)excel文件包含多個(gè)sheet。)
2、Worksheet操作表格的模塊(工作表,一個(gè)workbook有多個(gè),表名識(shí)別,如“sheet1”,“sheet2”等。)
3、Cell操作單元格的模塊(單元格,存儲(chǔ)數(shù)據(jù)對(duì)象)
先創(chuàng)建一個(gè)對(duì)象,新建一個(gè)工作簿:
from openpyxl import Workbook#新建一個(gè)工作簿,創(chuàng)建一個(gè)對(duì)象new_wb=Workbook('test2.xlsx')new_wb.save('test2.xlsx')
運(yùn)行結(jié)果:
在相同的目錄下生成了一個(gè)新的excel文件,如果讀取一個(gè)工作簿,我們使用如下代碼:
from openpyxl import load_workbook#打開已有的工作簿,創(chuàng)建一個(gè)對(duì)象wb = load_workbook('test1.xlsx')# 激活當(dāng)前sheet表ws = wb.active#打印當(dāng)前工作表的名字print(ws.title)運(yùn)行結(jié)果:Sheet1
如果要修改工作表的名字,我們運(yùn)行以下代碼:
from openpyxl import load_workbookwb = load_workbook('test1.xlsx')ws.title='第一個(gè)表'wb.save('test1.xlsx')
運(yùn)行結(jié)果:
如果我們需要新建表,可以使用下面的命令:
from openpyxl import load_workbookwb = load_workbook('test1.xlsx')wb.create_sheet('最后的位置')wb.create_sheet('倒數(shù)第二的位置',-1)wb.create_sheet('最前面的位置',0)wb.save('test1.xlsx')
最后一定要記得保存,參數(shù)里面要寫上為文件名:
如果要?jiǎng)h除表,使用下面的命令:
from openpyxl import load_workbookwb = load_workbook('test1.xlsx')del wb['倒數(shù)第二的位置']wb.save('test1.xlsx')
結(jié)果如下:
可以看到,剛才創(chuàng)建的'倒數(shù)第二的位置'這個(gè)表被刪除了!我們可以通過下面的命令來指定工作表:
wb.sheetnames:# 獲取文檔所有工作表名稱,返回一個(gè)列表
wb['Sheet1']:# 獲取指定的工作表
wb.active:# 獲取當(dāng)前活躍的工作表
from openpyxl import load_workbookwb = load_workbook('test1.xlsx')#獲取所有的工作表名稱print(wb.sheetnames)#指定即將要操作的工作表print(wb['Sheet2'])#獲取當(dāng)前激活的工作表print(wb.active)wb.save('test1.xlsx')運(yùn)行結(jié)果:['最前面的位置', '第一個(gè)表', 'Sheet2', 'Sheet3', '最后一個(gè)表', '最后的位置']<Worksheet 'Sheet2'><Worksheet '最后的位置'>
如果想修改當(dāng)前表標(biāo)簽的顏色:
from openpyxl import load_workbookwb = load_workbook('test1.xlsx')#修改當(dāng)前工作表標(biāo)簽顏色(紅色)ws=wb.activews.sheet_properties.tabColor = 'ff0000'wb.save('test1.xlsx')
運(yùn)行結(jié)果如下:
復(fù)制工作表:
from openpyxl import load_workbookwb = load_workbook('test1.xlsx')ws=wb.activewb.copy_worksheet(ws)wb.save('test1.xlsx')
運(yùn)行結(jié)果如下:
可以通過下面命令獲得工作表的信息:
from openpyxl import load_workbookwb = load_workbook('test1.xlsx')# 獲取文檔的字符集編碼print(wb.encoding, end='\n\n')# 獲取文檔的元數(shù)據(jù)如標(biāo)題,創(chuàng)建者,創(chuàng)建日期等print(wb.properties)wb.save('test1.xlsx')結(jié)果如下:utf-8<openpyxl.packaging.core.DocumentProperties object>Parameters:creator='openpyxl', title=None, description=None, subject=None, identifier=None, ........
如何獲取某一個(gè)表中的最大行和列呢?
from openpyxl import load_workbookwb = load_workbook('test1.xlsx')ws=wb.activey=ws.max_columnx=ws.max_rowprint(x,y)wb.save('test1.xlsx')結(jié)果:5 3
我們來驗(yàn)證一下,執(zhí)行前已經(jīng)寫入一些數(shù)據(jù):
果然是5行,3列的數(shù)據(jù)!如果要獲取其中單元格的值:
from openpyxl import load_workbookwb = load_workbook('test1.xlsx')# 獲取單元格的值ws=wb.active# 選擇單個(gè)單元格(獲取指定位置的單元格對(duì)象)print(ws['A2'].value)print(ws.cell(2, 1).value) # 先行后列,都是索引下標(biāo)wb.save('test1.xlsx')結(jié)果:66
我們來看看:
獲取單元格的屬性有哪些命令:
from openpyxl import load_workbookwb = load_workbook('test1.xlsx')ws=wb.active# 獲取指定位置的單元格對(duì)象cell = ws['B2']print('單元格列索引',cell.col_idx)print('單元格列索引',cell.column)print('單元格的行索引',cell.row)print('單元格列名',cell.column_letter)print('單元格的坐標(biāo)',cell.coordinate)wb.save('test1.xlsx')輸出:?jiǎn)卧窳兴饕?2單元格列索引 2單元格的行索引 2單元格列名 B單元格的坐標(biāo) B2
重點(diǎn)來了,怎么修改單元格的值呢?
from openpyxl import load_workbookwb = load_workbook('test1.xlsx')#寫入單元格ws=wb['第一個(gè)表']#在A2單元格寫入數(shù)據(jù)ws['A2']='寫入第1個(gè)數(shù)據(jù)'#在第1行,第2列寫入數(shù)據(jù)ws.cell(1,2).value='寫入第2個(gè)數(shù)據(jù)'wb.save('test1.xlsx')
運(yùn)行結(jié)果如下:
在最后一行追加數(shù)據(jù)的方法:
from openpyxl import load_workbookwb = load_workbook('test1.xlsx')#在最后一行追加數(shù)據(jù)ws=wb['第一個(gè)表']ws.append([1, 2, 3])wb.save('test1.xlsx')
運(yùn)行結(jié)果:
讀取行和列的數(shù)據(jù),準(zhǔn)備數(shù)據(jù)如下
讀取代碼:
from openpyxl import load_workbookwb = load_workbook('test1.xlsx')#讀取列的方法ws=wb['第一個(gè)表']#讀取第1列(方法1)x=ws.max_rows=ws[f'1:{x}']print('第1列數(shù)據(jù),方法1')for i in s: # print(type(i)) print(i[0].value)#元組需要下標(biāo)#讀取第1列(方法2)p=ws['A']print('第1列數(shù)據(jù),方法2')for j in p: print(j.value)#對(duì)象不可下標(biāo)#讀取行的方法#讀取第一行(方法1)m=ws['1']print('第1行數(shù)據(jù),方法1')for q in m: print(q.value) # 對(duì)象不可下標(biāo)#讀取第一行(方法2)n=ws['2:3']print('第2行到第3行數(shù)據(jù),方法2')#獲得一個(gè)二維數(shù)組,需要2次循環(huán)取出數(shù)據(jù)for d in n: for u in d: print(u.value) wb.save('test1.xlsx')
輸出結(jié)果如下:
第1列數(shù)據(jù),方法1A1A2A3第1列數(shù)據(jù),方法2A1A2A3第1行數(shù)據(jù),方法1A1B1C1第2行到第3行數(shù)據(jù),方法2A2B2C2A3B3C3
刪除行和列:
#刪除行和列ws.delete_cols(1) # 刪除第一列,以此類推、n代表刪除第n列ws.delete_rows(1) # 刪除第一行,以此類推、n代表刪除第n行
運(yùn)行結(jié)果如下:
以上是Openpyxl的常規(guī)操作,如果需要設(shè)置樣式,插入公式等更多的應(yīng)用,需要導(dǎo)入Openpyxl的其他模塊;
更多復(fù)雜的數(shù)據(jù)處理可能還會(huì)用到NumPy或者Pandas等第三方庫。
寫程序可能比不上熟練使用VBA來得快,但對(duì)于長(zhǎng)期重復(fù)的操作,Python的優(yōu)勢(shì)是顯而易見的。
聯(lián)系客服