Python操作excel的幾種方式--xlrd、xlwt、openpyxl
釋出時間:2016-05-13, 17:54:19
最後更新:2016-05-13, 21:29:30
在處理excel資料時發現了xlwt的侷限性–不能寫入超過65535行、256列的資料(因為它只支援Excel 2003及之前的版本,在這些版本的Excel中行數和列數有此限制),這對於實際應用還是不夠的。為此經過一番尋找發現了一個支援07/10/13版本Excel的openpyxl,雖然功能很強大,但是操作起來感覺沒有xlwt方便。下面分別說下幾個模組的常用操作。
xlrd
xlrd是用來從Excel中讀寫資料的,但我平常只用它進行讀操作,寫操作會遇到些問題。用xlrd進行讀取比較方便,流程和平常手動操作Excel一樣,開啟工作簿(Workbook),選擇工作表(sheets),然後操作單元格(cell)。下面舉個例子,例如要開啟當前目錄下名為”data.xlsx”的Excel檔案,選擇第一張工作表,然後讀取第一行的全部內容並打印出來。Python程式碼如下:
1 2 3 4 5 6 7 8 9 10 11 |
#開啟excel檔案 data=xlrd.open_workbook('data.xlsx') #獲取第一張工作表(通過索引的方式) table=data.sheets()[0] #data_list用來存放資料 data_list=[] #將table中第一行的資料讀取並新增到data_list中 data_list.extend(table.row_values(0)) #打印出第一行的全部資料 for item in data_list: print item |
上面的程式碼中讀取一行用table.row_values(number),類似的讀取一列用table.column_values(number),其中number為行索引,在xlrd中行和列都是從0開始索引的,因此Excel中最左上角的單元格A1是第0行第0列。
xlrd中讀取某個單元格用table.cell(row,col)即可,其中row和col分別是單元格對應的行和列。
下面簡單歸納一下xlrd的用法
xlrd用法總結
-
開啟Excel工作簿
1
data=xlrd.open_workbook(filename)
-
檢視工作簿中所有sheet的名稱
1
data.sheet_names()
-
選擇某一個工作表(通過索引或表名稱)
1 2 3 4 5 6 7 8
#獲取第一個工作表 table=data.sheets()[0] #通過索引獲取第一個工作表 table=data.sheet_by_index(0) #通過表名稱選擇工作表
-
獲取表格的行數和列數
1 2
nrows=table.nrows ncols=table.ncols
-
獲取整行和整列的值
1 2
table.row_values(number) table.column_values(number)
-
通過迴圈讀取表格的所有行
1 2
for rownum in xrange(table.nrows): print table.row_values(rownum)
-
獲取單元格的值
1 2 3 4 5
cell_A1=table.row(0)[0].value #或者像下面這樣 cell_A1=table.cell(0,0).value #或者像下面這樣通過列索引 cell_A1=table.col(0)[0].value
寫操作自己很少用,所以就不歸納了。
xlwt
如果說xlrd不是一個單純的Reader(如果把xlrd中的後兩個字元看成Reader,那麼xlwt後兩個字元類似看成Writer),那麼xlwt就是一個純粹的Writer了,因為它只能對Excel進行寫操作。xlwt和xlrd不光名字像,連很多函式和操作格式也是完全相同。下面簡要歸納一下常用操作。
xlwt常用操作
新建一個Excel檔案(只能通過新建寫入)
1
|
data=xlwt.Workbook()
|
新建一個工作表
1
|
table=data.add_sheet('name')
|
寫入資料到A1單元格
1
|
table.write(0,0,u'呵呵')
|
注意:如果對同一個單元格重複操作,會引發overwrite Exception,想要取消該功能,需要在新增工作表時指定為可覆蓋,像下面這樣
1
|
table=data.add_sheet('name',cell_overwrite_ok=True)
|
儲存檔案
1
|
data.save('test.xls')
|
這裡只能儲存副檔名為xls的,xlsx的格式不支援
xlwt支援一定的樣式,操作如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|