python操作excel-創(chuàng)新互聯(lián)

python 讀寫(xiě) excel 有好多選擇,但是,方便操作的庫(kù)不多,在我嘗試了幾個(gè)庫(kù)之后,我覺(jué)得兩個(gè)比較方便的庫(kù)分別是 xlrd/xlwt、openpyxl。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),鄂托克前企業(yè)網(wǎng)站建設(shè),鄂托克前品牌網(wǎng)站建設(shè),網(wǎng)站定制,鄂托克前網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,鄂托克前網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

之所以推薦兩個(gè)庫(kù)是因?yàn)檫@兩個(gè)庫(kù)分別操作的是不同版本的 excel,xlrd 操作的是 xls/xlxs 格式的 excel,而 openpyxl 只支持 xlxs 格式的excel,openpyxl 使用起來(lái)會(huì)更方便一些,所以如果你只操作 xlxs 文件的話,那么可以優(yōu)先選擇 openpyxl,如果要兼容 xls 的話,那就用 xlrd/xlwt 吧。
本處使用openpyxl來(lái)實(shí)現(xiàn)

安裝

pip install openpyxl

如果excel里面有圖片(jpeg, png, bmp,…),需要安裝圖片處理模塊

pip install pillow

excel寫(xiě)

from openpyxl import Workbook
wb = Workbook()

創(chuàng)建一個(gè)新的工作薄

ws1 = wb.create_sheet("Mysheet")  #默認(rèn)最后一個(gè)
ws2 = wb.create_sheet("Mysheet", 0) #第一個(gè)

保存

wb.save('balances.xlsx')

修改工作薄的名稱

ws.title = "New Title"

excel 寫(xiě)數(shù)據(jù)

ws['A4']=4 #這將返回A4處的單元格,如果尚不存在,則創(chuàng)建一個(gè)單元格。值可以直接分配
ws.cell(row=4, column=2, value=10) # 也可以通過(guò)cell來(lái)進(jìn)行寫(xiě)入,通過(guò)行數(shù)和列數(shù)來(lái)找到單元格所在的位置,通過(guò)value來(lái)賦值

append函數(shù)

可以一次添加多行數(shù)據(jù),從第一行空白行開(kāi)始(下面都是空白行)寫(xiě)入。

# 添加一行
row = [1 ,2, 3, 4, 5]
sheet.append(row)
## execl讀
```python
from openpyxl import load_workbook  #導(dǎo)入模塊
wb = load_workbook(filename = 'balances.xlsx') #打開(kāi)文件,默認(rèn)可讀寫(xiě),若有需要可以指定write_only和read_only為T(mén)rue
sheet = wb['test2'] #找到工作表
print(sheet['B4'].value) #輸出內(nèi)容
# B9處寫(xiě)入平均值
sheet['B9'] = '=AVERAGE(B2:B8)'

但是如果是讀取的時(shí)候需要加上data_only=True這樣讀到B9返回的就是數(shù)字,如果不加這個(gè)參數(shù),返回的將是公式本身'=AVERAGE(B2:B8)'

獲取所有的工作薄名稱

print(wb.sheetnames)

獲取其中一個(gè)工作薄名稱

for sheet in wb:
    print(sheet)
wb["New Title"]  #直接獲取名稱為New Title的工作薄

獲得大行和大列

print(sheet.max_row)
print(sheet.max_column)

獲取行和列

sheet.rows為生成器, 里面是每一行的數(shù)據(jù),每一行又由一個(gè)tuple包裹。
sheet.columns類似,不過(guò)里面是每個(gè)tuple是每一列的單元格。

# 因?yàn)榘葱?,所以返回A1, B1, C1這樣的順序
for row in sheet.rows:
    for cell in row:
        print(cell.value)

# A1, A2, A3這樣的順序
for column in sheet.columns:
    for cell in column:
        print(cell.value)

上面的代碼就可以獲得所有單元格的數(shù)據(jù)。如果要獲得某行的數(shù)據(jù)呢?給其一個(gè)索引就行了,因?yàn)閟heet.rows是生成器類型,不能使用索引,轉(zhuǎn)換成list之后再使用索引,list(sheet.rows)[2]這樣就獲取到第三行的tuple對(duì)象。

for cell in list(sheet.rows)[2]:
    print(cell.value)

如何獲得任意區(qū)間的單元格?

可以使用range函數(shù),下面的寫(xiě)法,獲得了以A1為左上角,B3為右下角矩形區(qū)域的所有單元格。注意range從1開(kāi)始的,因?yàn)樵趏penpyxl中為了和Excel中的表達(dá)方式一致,并不和編程語(yǔ)言的習(xí)慣以0表示第一個(gè)值。

for i in range(1, 4):
    for j in range(1, 3):
        print(sheet.cell(row=i, column=j).value)

# out
None
None
None
None
None
None

還可以像使用切片那樣使用。sheet['A1':'B3']返回一個(gè)tuple,該元組內(nèi)部還是元組,由每行的單元格構(gòu)成一個(gè)元組

for row_cell in sheet_ranges['A1':'B3']:
    for cell in row_cell:
        print(cell)

設(shè)置單元格風(fēng)格--Style

先導(dǎo)入需要的類from openpyxl.styles import Font, colors, Alignment

分別可指定字體相關(guān),顏色,和對(duì)齊方式。

字體

bold_itatic_24_font = Font(name='等線', size=24, italic=True, color=colors.RED, bold=True)

sheet['A1'].font = bold_itatic_24_font

對(duì)齊方式

也是直接使用cell的屬性aligment,這里指定垂直居中和水平居中。除了center,還可以使用right、left等等參數(shù)。

# 設(shè)置B1中的數(shù)據(jù)垂直居中和水平居中
sheet['B1'].alignment = Alignment(horizontal='center', vertical='center')

設(shè)置行高和列寬
有時(shí)候數(shù)據(jù)太長(zhǎng)顯示不完,就需要拉長(zhǎng)拉高單元格。

# 第2行行高
sheet.row_dimensions[2].height = 40
# C列列寬
sheet.column_dimensions['C'].width = 30

合并和拆分單元格

所謂合并單元格,即以合并區(qū)域的左上角的那個(gè)單元格為基準(zhǔn),覆蓋其他單元格使之稱為一個(gè)大的單元格。
相反,拆分單元格后將這個(gè)大單元格的值返回到原來(lái)的左上角位置。

# 合并單元格, 往左上角寫(xiě)入數(shù)據(jù)即可
sheet.merge_cells('B1:G1') # 合并一行中的幾個(gè)單元格
sheet.merge_cells('A1:C3') # 合并一個(gè)矩形區(qū)域中的單元格

合并后只可以往左上角寫(xiě)入數(shù)據(jù),也就是區(qū)間中:左邊的坐標(biāo)。
如果這些要合并的單元格都有數(shù)據(jù),只會(huì)保留左上角的數(shù)據(jù),其他則丟棄。換句話說(shuō)若合并前不是在左上角寫(xiě)入數(shù)據(jù),合并后單元格中不會(huì)有數(shù)據(jù)。
以下是拆分單元格的代碼。拆分后,值回到A1位置。

sheet.unmerge_cells('A1:C3')

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁(yè)名稱:python操作excel-創(chuàng)新互聯(lián)
本文鏈接:http://muchs.cn/article14/dcpide.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、自適應(yīng)網(wǎng)站、網(wǎng)站導(dǎo)航App開(kāi)發(fā)、移動(dòng)網(wǎng)站建設(shè)、軟件開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)