Python處理Excel數據

前段時間作了個小項目,幫個海洋系的教授作了個數據處理的軟件。基本的功能很簡單,就是對Excel裏面的一些數據進行過濾,統計,對多個表的內容進行合併等。以前沒有處理Excel數據的經驗,甚至於本身都不多用到Excel。記得《Python核心編程》的最後一章裏有講到用Win32 COM操做office, 看了一下講的不是很清楚。google了一下找到很多能處理excel數據的模塊。對比了一下最終選定了openpyxl,openpyxl專門用於處理Excel2007及以上版本產生的xlsx文件。不幸的是我所獲得的數據中xls和xlsx都有,不過轉換並非什麼難事,就暫時吧這個問題忽略了。python

模塊的安裝過程很是簡單,官網上有簡單的使用說明和API文檔,總體來講使用很是容易,也基本能知足個人需求。對於Excel文件,我所須要的只是從中將相應位置的數據讀取出來,以及把數據寫入到對應的位置中去。而其間數據的處理,經過python能夠很容易地完成。編程

1. Excel數據的類型及組織方式

openpyxl中定義了多種數據格式,我只涉及到了其中最重要的三種:
NULL: 空值,對應於python中的None,表示這個cell裏面沒有數據。
numberic: 數字型,統一按照浮點數來進行處理。對應於python中的float。
string: 字符串型,對應於python中的unicode。google

每個Excel數據文件從上至下分爲三個層級的對象:
workbook: 每個Excel文件就是一個workbook。
sheet: 每個workbook中能夠包含多個sheet,具體就對應Excel中咱們在左下腳所看到的「sheet1」,「sheet2」等。
cell: 每個sheet就是咱們一般所看到的一個表格,能夠含有m行,n列,每一個肯定的行號,列號所對應的一個格子就是一個cell。excel

2. 從Excel中讀取數據

從一個既有的xlsx文件中讀取數據,按照Excel文件的三個層級,分別作如下三個步驟code

1. 打開workbook:對象

from openpyxl import load_workbook
wb = load_workbook('file_name.xlsx')

2. 打開所需的sheet:
咱們能夠這樣打開workbook中的第一個sheet:索引

ws = wb.get_active_sheet()

變量_active_sheet_index用來肯定獲取哪個sheet,而默認狀況下它被置爲0。
也能夠經過sheet的名稱來獲取sheet:unicode

ws = wb.get_sheet_by_name("sheet_name")

openpyxl彷佛沒有提供按索引來讀取sheet,不過咱們老是能很容易地經過sheet_name來實現:文檔

sheet_names = wb.get_sheet_names()
ws = wb.get_sheet_by_name(sheet_names[index])

3. 獲取對應cell的值:
openpyxl提供可兩種方式來讀取cell,一是按照Excel的習慣用字母來表明列號,例如:字符串

c = ws.cell('A4').value

也能夠按照行號列號來讀取:

d = ws.cell(row = 3, column = 0)

3. 將數據寫入Excel

同讀取相似,寫入一個Excel文件,要經歷一下四個步驟:
1. 新建workbook
直接新建一個workbook對象便可:

wb = Workbook()

2. 新建sheet
默認狀況下,新建立的sheet是排在最後的,若想要建立一個排在最前的sheet,能夠傳入參數0:

ws1 = wb.create_sheet()  # insert at the end
ws2 = wb.create_sheet(0)  # insert at the first position

3. 寫入數據

直接將要寫入的數據賦值給相應的cell便可,若僅僅是修改一個表。能夠跳過前兩個步驟,不過要注意不要覆蓋掉其它數據:

ws.cell('B5') = value1
ws.cell(row = 3, column = 7) = value2

4. 保存數據

最後寫入將數據寫入便可,注意若保存路徑下有同名的文件的話,以前的文件會被覆蓋:

wb.save('file_name.xlsx')
相關文章
相關標籤/搜索