使用Python操作Excel文檔(一)


Python | 使用Python操作Excel文檔(一)

0 前言

在閱讀本文之前,請確保您已滿足或可能滿足以下條件:

  1. 請確保您具備基本的Python編程能力。

  2. 請確保您會使用Excel。

  3. 請確保您的電腦已經安裝好Python且pip可用。

另外操作Excel需要使用openpyxl模塊,請安裝好該模塊:

pip install openpyxl

演示環境:

  1. 演示環境為win10+Python3.6

  2. openpyxl版本為2.6.2

  3. 調試工具為IDLE

1. openpyxl簡述

openpyxl操作Excel的第三方庫,作者是Eric Gazoni, Charlie Clark。您也可以訪問openpyxl的官方網站通過官方手冊進行學習。同時附上官方網站的地址:

https://openpyxl.readthedocs.io/en/stable/index.html。

目前openpyxl的最新版本是2.6.2版本。在openpyxl之前,我們使用xlrd和xlwt來操作Excel表格,事實上這兩個庫也非常好用,一讀一寫,然而遺憾的是它們只能操作2003及以前的版本,而openpyxl卻能支持2010版本。

另外這里附上源碼地址,感興趣的同學可以自行下載學習或者參與開發:

http://bitbucket.org/openpyxl/openpyxl/src

2. 創建/讀取一個Excel工作簿

我們知道一個xlsx文件叫做工作簿,工作簿中的每一張表叫做工作表,表中每個格叫做單元格。

創建工作簿,示例代碼如下:

from openpyxl import Workbook
wb = Workbook().save("example.xlsx")

Workbook對象是一個用來創建一個工作簿,save方法用來將這個對象保存成一個文件。

可以查看一下,程序執行的目錄下是不是出現了一個example.xlsx文件。這時,是一個全新的文件,里面只有一張默認的表。

讀取已存在的xlsx文件,使用openpyxl中的load_wordbook()方法。示例代碼如下:

from openpyxl import load_workbook
wb = load_workbook("example.xlsx")

4. 操作Excel表:讀取,創建,刪除,復制

每個工作表都是一個Worksheet對象。

首先訪問wb的sheetnames屬性來獲取文件中的所有工作表的名字,:

wb.sheetnames # ['Sheet']

一般來說,當我們打開一個Excel表格,會看到上次我們保存的表。這個表是活動狀態的。我們可以使用Workbook類中的active屬性來讀取這張表。

ws = wb.active 

ws就是我們要操作的表了。你可以使用ws的title屬性來獲取表明,一般當我們創建一個xlxs文件的時候,會默認創建一張表Sheet,接下來我們對ws的操作,就是對這張表的操作,可以理解成對ws的操作會反映到這張表上。

例如訪問ws的title屬性,可以獲取或修改表名。ws是一個Worksheet對象,也可以使用Workbook類中的get_sheet_by_name("sheet_name")方法讀取這張表。也可以使用wb[表名]的方式,但是舊版本的openpyxl可能會不知這種訪問方式。使用title給這張表重命名:

ws.title # 'Sheet'
ws = wb.get_sheet_by_name("Sheet")
ws.title # 'Sheet'
ws.title = "demo"
wb.sheetnames # ['demo']
ws = wb["demo"]

創建一張表,使用Workbook中的create_sheet()方法:

 ws1 = wb.create_sheet("demo1")
 wb.sheetnames # ['demo', 'demo1']

刪除一張表,使用Workbook中的remove_sheet()方法:

wb.remove_sheet(ws1) 
wb.sheetnames # ['demo']

需要注意的是,也可以使用wb.remove(ws1)del w["demo1"],但是不建議這種寫法。

復制一張表,使用Workbook中的copy_worksheet()方法:

ws2 = wb.copy_worksheet(ws)
wb.sheetnames # ['demo', 'demo Copy']

PS:舊版的openpyxl可能不支持sheetnames屬性,這時可以使用Workbook類中的get_sheet_names()方法,舊版中也可能不支持wb[表名]的訪問方式以及active屬性,這時可以使用get_active_sheet()方法

5. 操作單元格

每個單元格都是一個Cell對象。

訪問單元格,需要使用坐標,坐標的表示方式有兩種,一種是使用字符串,如‘A1’,表示的是第一列,第一行。。另一種就是使用標准得坐標如,column=1, row=1,利用ws中的cell方法來第一行第一列的單元格。訪問單元格的方式是使用如ws['A1'], 即表變量[坐標]

ws['A1'] = 0
ws.cell(row=1, column=1, value=0)
print(ws['A1'].value) # 0

需要強調的是,雖然可以直接給單元格賦值,但是要讀取這個值,還是需要訪問Cell類中的value屬性的。而且坐標必須從1開始。

PS:部分舊版可能不支持表變量[坐標]的訪問方式,這時,可以使用ws.Cell('A1')或ws.Cell(column=1, row=1)的方式來訪問。

6. 向表中寫入大量數據

for i in range(1, 20):
    for j in range(1, 20):
        ws.cell(i,j,value=i*j)

需要注意的是,使用cell時,坐標至少是1,也就是說,大於0的整數。

wb.save("example.xlsx")

好,到這里,我們保存,來看下效果。

7.復習下今天內容

關於使用openpyxl操作Excel文檔,應該要先了解openpyxl提供的三個類:

  • Workbook類用來創建工作簿、讀取、創建,刪除,復制工作表等。

  • load_workbook方法會讀取已存在的工作簿,返回Workbook對象

  • Worksheet類用來進行表的操作,比如訪問單元格。返回Cell對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM