openyxl讀取Excel

有一萬年沒來這兒寫blog了,今天等着發版,抽空來寫點東西吧。html

python有不少模塊都是用來操做excel的,好比xlrd,xlwt,pyExcelerator。用着很方便,可是問題是,只能支持到excel2003。雖然通常的應用其實足夠了,可是若是遇到了導出大量數據(超過65535條)的需求時,excel2003就不夠用了。因此我就只好去找一個能支持excel2007的模塊。python

 

google了一下,發現了這個openpyxl,不過網上也沒什麼中文的文檔能夠看,因而就本身琢磨琢磨。數據庫

 

 

I.安裝api

 

openpyxl的最新版本是1.5.0 下載地址 http://pypi.python.org/pypi/openpyxl/1.5.0google

 

需求python的版本是2.6+  ,也就是說,若是centOS系統的機器想用,那得升級系統的python。。。spa

 

安裝就是解壓縮,而後cd到目錄,而後.net

 

python setup.py installexcel

 

你懂的~orm

 

 

 II.讀取excel2007文件htm

 

 

[python] view plaincopy

  1. #-*- coding:utf-8 -*  

  2.   

  3. from openpyxl.reader.excel import load_workbook  

  4. import MySQLdb  

  5. import time  

  6.   

  7. #開始時間  

  8. startTime = time.time()  

  9.   

  10. #讀取excel2007文件  

  11. wb = load_workbook(filename = r'empty_book.xlsx')  

  12.   

  13. #顯示有多少張表  

  14. print "Worksheet range(s):", wb.get_named_ranges()  

  15. print "Worksheet name(s):", wb.get_sheet_names()  

  16.   

  17. #取第一張表  

  18. sheetnames = wb.get_sheet_names()  

  19. ws = wb.get_sheet_by_name(sheetnames[0])  

  20.   

  21. #顯示錶名,錶行數,表列數  

  22. print "Work Sheet Titile:",ws.title  

  23. print "Work Sheet Rows:",ws.get_highest_row()  

  24. print "Work Sheet Cols:",ws.get_highest_column()  

  25.   

  26.   

  27. # 創建存儲數據的字典   

  28. data_dic = {}   

  29.   

  30. #把數據存到字典中  

  31. for rx in range(ws.get_highest_row()):  

  32.       

  33.     temp_list = []  

  34.     pid = ws.cell(row = rx,column = 0).value  

  35.     w1 = ws.cell(row = rx,column = 1).value  

  36.     w2 = ws.cell(row = rx,column = 2).value  

  37.     w3 = ws.cell(row = rx,column = 3).value  

  38.     w4 = ws.cell(row = rx,column = 4).value  

  39.     temp_list = [w1,w2,w3,w4]  

  40.      

  41.     data_dic[pid] = temp_list  

  42.   

  43. #打印字典數據個數  

  44. print 'Total:%d' %len(data_dic)  

   

 

 

 

 注意的是ws.cell()方法,支持的參數有兩種,cell(coordinate=Nonerow=Nonecolumn=None)

coordinate座標,eg  ws.cell("B1")

row 和 column 是行和列 ,都是從0開始

 

還有,若是想取得格里的值,得用ws.cell("A1").value 取到,若是用過xlrd,由於寫法差很少,可能就會忘記加value了。

 

III.寫入excel2007

 

 

[python] view plaincopy

  1. 寫excel2007  

  2.   

  3. #-*- coding:utf-8 -*  

  4.   

  5.   

  6. import MySQLdb  

  7. import time  

  8. import sys  

  9. #workbook相關  

  10. from openpyxl.workbook import Workbook  

  11. #萬惡的ExcelWriter,妹的封裝好了不早說,封裝了很強大的excel寫的功能  

  12. from openpyxl.writer.excel import ExcelWriter  

  13. #一個eggache的數字轉爲列字母的方法  

  14. from openpyxl.cell import get_column_letter  

  15.   

  16.   

  17. #新建一個workbook  

  18.   

  19. wb = Workbook()  

  20. #新建一個excelWriter  

  21. ew = ExcelWriter(workbook = wb)  

  22.   

  23. #設置文件輸出路徑與名稱  

  24. dest_filename = r'empty_book.xlsx'  

  25.   

  26. #第一個sheet是ws  

  27. ws = wb.worksheets[0]  

  28.   

  29. #設置ws的名稱  

  30. ws.title = "range names"   

  31.   

  32.   

  33. #錄入數據,注意col是數字轉字母,而後須要限定%s(string型)當參數傳到ws.cell()方法中去,records能夠想象爲一個從數據庫裏查詢出來的數據集合  

  34. i=1  

  35. table = {}  

  36. for record in records:  

  37.     for x in range(1,len(record)+1):  

  38.         col = get_column_letter(x)  

  39.         ws.cell('%s%s'%(col, i)).value = '%s' % (record[x-1])        

  40.               

  41.     i+=1  

  42.   

  43. #又建了一個sheet,ws名字都沒變,太省了。。。可是確實是一個新的sheet,不會影響以前那個sheet的東西  

  44. ws = wb.create_sheet()  

  45.   

  46. ws.title = 'Pi'  

  47.   

  48. ws.cell('F5').value = 3.14  

  49.   

  50.       

  51. #寫文件  

  52. ew.save(filename = dest_filename)  

 

 

 注意的地方:

 

# col是用列號x爲參數,調用了這個模塊的get_column_letter方法算出來的字母,這個比較蛋疼。

   col = get_column_letter(x)

 

#在爲數據格賦值的時候,注意寫的格式:要不會有各類不靠譜的問題出現(這個是用座標的方式寫的,其實用row ,col的方式可能沒那麼麻煩)

  ws.cell('%s%s'%(col, i)).value = '%s' % (record[x-1])

 

關於該模塊的API  能夠查詢官方文檔  http://packages.python.org/openpyxl/api.html

 

整體來講,這個模塊仍是挺方便的,可是問題就是在對於python的版本有必定要求,若是在centOs上用,可能會有些問題。

 

本文只是簡單的寫了下使用的方法,以後格式超連接神馬的以後再填上~

 

 

關於pyExcelerator的使用教學,給朋友作個廣告  http://blog.csdn.net/suofiya2008/archive/2010/05/14/5589627.aspx

相關文章
相關標籤/搜索