<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    海上月明

    editer by sun
    posts - 162, comments - 51, trackbacks - 0, articles - 8
       :: 首頁 :: 新隨筆 ::  :: 聚合  :: 管理

    PYTON與EXCEL:使用pyExcelerator來讀寫 Excel文件

    Posted on 2014-11-21 09:35 pts 閱讀(2391) 評論(0)  編輯  收藏 所屬分類: PythonOffice
    【FROM】http://blog.csdn.net/suofiya2008/article/details/5589627   
    我們寫程序,經(jīng)常會需要輸出一些數(shù)據(jù)進(jìn)行保存,對于格式固定的大量數(shù)據(jù),Excel表格會是比較好的一個選擇。如果你需要在Python下寫入Excel文件,那么就需要用到PyExcelerator了。

    PyExcelerator是一個第三方庫,用來處理Excel文件。它的優(yōu)點是:

    簡單易用,上手快。

    寫操作很方便,適合用來生成Excel文件記錄數(shù)據(jù)。

    不需要WinCOM支持,沒裝Office也 可以生成Excel表格

    當(dāng)然,PyExcelerator也是有缺點的,它所提供的讀寫操作方式相對簡單,要對已有的Excel文件進(jìn)行修改,就顯得比較麻煩了。

    如果要對已有的Excel表格進(jìn)行較復(fù)雜的修改操作,選擇PyExcelerator就不太合適了,這時候可以試試另外的方法。比如使用pywin32通過WinCOM來操作Excel表格,或者使用xlrd。

    PyExcelerator的官方主頁是http://sourceforge.net/projects/pyexcelerator,程序包中并沒有太多的教程文檔,不過包含了一些簡單的示范操作的小例子,如果需要更詳細(xì)的信息,就只能讀源代碼了。

     

    一。初始pyExcelerator

     

         pyExcelerator是一個基于python的可以讀寫excel文件的產(chǎn)品。和xlrd相比,pyExcelrator的主要特點在于可以對excel文件進(jìn)行寫操作。但是在讀取數(shù)據(jù)方面,功能就沒有xlrd強大了。

      pyExcelerator只能提供關(guān)于表單內(nèi)容的基礎(chǔ)數(shù)據(jù),對于表單行數(shù)、列數(shù)、單元格數(shù)據(jù)類型等詳細(xì)信息都沒有提供訪問接口。因此開發(fā)人員必須了解表單的具體結(jié)構(gòu),才對表單中的數(shù)據(jù)進(jìn)行正確的分析轉(zhuǎn)換。

      將pyExcelerator產(chǎn)品包(pyexcelerator-0.6.3a.tgz)上傳到服務(wù)器上之后解壓縮,然后在產(chǎn)品目錄下鍵入如下命令:

         # python setup.py install
    
    
    
    
    
    
    
    在命令行中,你將看到一連串的running,creating,copying,byte—compiling命令結(jié)果,吧啦吧啦。。。
    
    
    
    最后一行出現(xiàn)
    
    Writing C:/Python26/Lib/site-packages/pyExcelerator-0.6.4.1-py2.6.egg-info
    
    
    
    說明已經(jīng)將插件安裝到你的python環(huán)境中了,至此安裝完成。
    
    
    
    這里提一個小例子:
    1. from pyExcelerator import *  
    2.   
    3.   
    4.   
    5. w = Workbook() #創(chuàng)建一個工作簿  
    6.   
    7.   
    8.   
    9. ws = w.add_sheet('Hey, Hades'#創(chuàng)建一個工作表  
    10.   
    11.   
    12.   
    13. ws.write(0,0,'bit'#在1行1列寫入bit  
    14.   
    15.   
    16.   
    17. ws.write(0,1,'huang'#在1行2列寫入huang  
    18.   
    19.   
    20.   
    21. ws.write(1,0,'xuan'#在2行1列寫入xuan  
    22.   
    23.   
    24.   
    25. w.save('mini.xls'#保存  
    二、Excel文件讀取

    from pyExcelerator import *
    sheets = parse_xls('d:/a.xls')

    很簡單,與 xlrd 不同。xlrd 需要先調(diào)用book = xlrd.open_workbook(filename)打開文檔,然后再調(diào)用sh= book.sheet_by_index(i)來得到第幾個sheet,然后再使用sh.cell_value(i,j)得到i行j列的單元格的值。操作多了一點。而上面的parse_xls(filename)則直接返回一個列表,每一項就是一個sheet的數(shù)據(jù)。每項是一個二元組(表名,單元格數(shù)據(jù))。其中單元格數(shù)據(jù)為一個字典,鍵值就是單元格的索引(i,j)。如果某個單元格無數(shù)據(jù),那么就不存在這個值。看似簡單,但從處理上不象  xlrd 一樣,可以知道每個sheet的最大行數(shù)和列數(shù),然后進(jìn)行循環(huán)。而使用 pyExcelerator好象沒有最大行數(shù)和列數(shù),再加上空數(shù)據(jù)又不存在,因此在處理上相對麻煩一些。這樣在處理上還需要注意。它與 xlrd 一樣都支持 unicode,但好象沒有 xlrd 一樣方便地判斷單元格的類型的方法,感覺還是 xlrd在功能上可能要強一些。當(dāng)然這只是個人感覺,再加上只是看了看例子,并沒有怎么使用。

    三、Excel文件寫入

    這個才是重頭。那么安裝好 pyExcelerator 之后,讀了 Readme.txt 之后了解到它的文檔正在進(jìn)行當(dāng)中,因此想多了解如何使用它需要看它所帶的例子,甚至看源程序。下面是我從例子中了解的如何寫一個 Excel 文檔需要了解的。

    為了方便,在導(dǎo)入這個模塊中使用了import *的方式。

    from pyExcelerator import *

    首先導(dǎo)入模塊,然后是生成工作薄。

    w = Workbook()

    接著是加入一個工作表(sheet)。

    ws = w.add_sheet('Hey, Dude')

    然后就可以保存了。

    w.save('mini.xls')

    上面的代碼加在一起就是:

    from pyExcelerator import *

    w = Workbook()
    ws = w.add_sheet('Hey, Dude')
    w.save('mini.xls')

    這就是最小的一個例子了,在例子中叫mini.py。你可以在例子目錄下運行mini.py看一看是不是生成了一個空的Excel文件。

    如果想加入中文很簡單,改為:

    #coding=cp936
    from pyExcelerator import *

    w = Workbook()
    ws = w.add_sheet(u'這是中文')
    w.save('mini.xls')

    這樣上面的執(zhí)行結(jié)果是生成一個空Excel文件,但它的第一個sheet的名字為“這是中文”。就這樣,只要保證你寫入時使用unicode就行了。

    空文件可以生成,那么如何插入單元格呢?

    ws.write(i, j, value)

    其中value為值,可以是unicode。

    接著,我們可能想改變單元格的樣式,如字體:

    font0 = Font()
    font0.name = 'Times New Roman'
    font0.struck_out = True
    font0.bold = True

    style0 = XFStyle()
    style0.font = font0

    這樣我們創(chuàng)建了一個字體,然后又生成了一個樣式。注意,真正起作用的是樣式,字體不過是樣式中的一種效果。

    這樣在寫入單元格時帶著這個樣式就行了,還是使用上面的write()方法:

    ws.write(1, 1, 'Test', style0)

    這是在名為ws的sheet中的第(1,1)單元格寫入了值為"Test"的內(nèi)容,并且它的樣式為style0。

    然后我們還可以設(shè)置單元格的邊框:

        borders = Borders()
        borders.left = 5
        style.borders = borders

    上面創(chuàng)建了一個邊框效果,設(shè)置了左邊框,至于5是什么意思,我也不清楚,隨便寫的。然后放到樣式中。
    上面的例子可以參考format.py程序

    其它還有許多的效果,簡單地列一下:

     示例名說明 
     col_width.py改變單元格寬度 
     row_style.py設(shè)置行的高度 
     merged*.py

    單元格合并 

     image.py

    插入圖片 

     outline*.py

    大綱效果(以前真沒用過) 

     wsprops.py

    sheet的屬性值打印 

     xls2*.py

    Excel轉(zhuǎn)為其它的文件格式 

    大家有興趣自已照著例子學(xué)吧。

     

     

     

    四: 時間小示例

     

    給俺的boss寫的一個小工具,使用Python對Excel進(jìn)行統(tǒng)計,然后把結(jié)束生成一個新的Excel表格,使用到了xlrdpyExcelerator兩個庫。
    簡單的介紹一下這兩個庫,先說xlrd,這個庫讀Excel比較方便,各種方法使用起來也挺方便:
    bk = xlrd.open_workbook('your.xls')
    sh = bk.sheets()[-1]
    上面兩句就可以打開Excel表格中的一個sheet,sheets得到的是一個list,存放所有的sheet。
    sh.nrows是該sheet中的行數(shù),知道這個后就可以使用for循環(huán)來讀所有的單元格了:
    sh.row(i)[3]這個就代表第i行的第4列。
    再看看pyExcelerator,這個用起來有點別扭:
    sheets = parse_xls('result.xls')
    先打開一個表格,sheets是一個list,包含了所有表格的內(nèi)容,每一項就是一個sheet,而每個sheet是二元tuple,第一個是該sheet的名字,第二個是一個dict,dict的key是一個二元組,表示單元格的坐標(biāo),如(0,0),第一行第一列。
    從上面的分析中可以得出要訪問Excel中第一個sheet的第一行第一列元素需要:
    sheets[0][1][(0,0)]
    pyExcelerator也不能得到行列數(shù)。
    寫文件也比較簡單:
    wb = Workbook()
    ws = wb.add_sheet('result')
    ws.write(0,0,“hello”)
    wb.save('result.xls')
    就不解釋了:-)
    寫文件時需要注意直接寫Unicode內(nèi)容進(jìn)去,而不要寫編碼過的內(nèi)容。
    給boss的代碼:PYTHON:
    #!/usr/bin/env python
    # -*- coding=utf-8 -*-
    #Using GPL v2

    import xlrd
    from pyExcelerator import *

    city = [(u'山城','[2,3]d+'),(u'水國','4d+'),(u'火縣','5d+'),
           (u'土城','6d+'),(u'土國','7d+'),(u'火鄉(xiāng)','8[1-5]d+'),
           (u'水鄉(xiāng)','8[067]d+'),]

    fname = '0107CRM.xls'
    bk = xlrd.open_workbook(fname)
    sh = bk.sheets()[-1]
    nrows = sh.nrows
    #result中按順序存放各city中各套餐的數(shù)量
    #順序為XTa+、XTb、XTb+
    result = []
    for i in range(len(city)):
        result.append([0,0,0])


    for r in range(1,nrows):
        num = str(sh.row(r)[3])[7:]
        flag = False
        for i in range(len(city)):
            if re.match(city[i][1],num):
                flag = True
                if sh.row(r)[2].value == 3001.0:
                    break
                name = sh.row(r)[0].value.encode('utf8')
                if 'XTa+' in name:
                    result[i][0]+=1
                if 'XTb' in name and 'XTb+' not in name:
                    result[i][1]+=1
                if 'XTb+' in name:
                    result[i][2]+=1
        if not flag:
            print "NO:"+num

    print result

    titles = [u'局向',u'數(shù)',u'M錄入數(shù)',u'X數(shù)',…………]
    wb = Workbook()
    ws = wb.add_sheet('result')
    for i in range(len(titles)):
        ws.write(0,i,titles[i])

    for i in range(len(city)):
        ws.write(i+1,0,city[i][0])
        ws.write(i+1,1,result[i][0])
        ws.write(i+1,4,result[i][1])
        ws.write(i+1,7,result[i][2])
        ws.write(i+1,10,result[i][0]+result[i][1]+result[i][2])
    ws.write(i+2,1,"=SUM(B2:B8)")
    wb.save('result.xls')


    后記:

    python對excel的操作確實不太強大,目前為止我只用過pyExcelerator,還有一個xlrd-xlwt的plugin;貌似這幾個對日常簡單的excel操作就夠用了!

    最近回頭看這篇blog的閱讀量還是挺大,今天工作之余寫下此后記,希望能和各位python高手們交流,共同提高!


    excel相關(guān)文章:

    1.xlrd-xlwt模塊  xlrd讀取excel文件(基本功能)

    2. 我同事魷魚哥解決excel2007讀寫的文章 openpyxl 讀寫excel2007使用筆記【感謝魷魚哥】

    主站蜘蛛池模板: 亚洲最大的成网4438| 亚洲狠狠久久综合一区77777| 亚洲中文久久精品无码1| 久久精品国产免费观看| 亚洲狠狠ady亚洲精品大秀| 2020久久精品国产免费| 亚洲天堂2017无码中文| 在线免费观看一级片| 猫咪免费人成在线网站| 国产午夜亚洲精品午夜鲁丝片| 视频免费在线观看| 亚洲精品福利视频| 最近免费中文在线视频| va天堂va亚洲va影视中文字幕| 最近2019中文字幕免费看最新| 亚洲成AV人片高潮喷水| 亚洲国产精品日韩专区AV| 午夜在线免费视频| 亚洲爆乳无码一区二区三区| 久久久免费精品re6| 国产成人精品日本亚洲11| 日本免费一本天堂在线| 成人av片无码免费天天看| 4444亚洲国产成人精品| 妞干网免费观看视频| 一区二区三区免费在线观看| 久久精品国产亚洲AV无码偷窥| 日韩精品视频免费在线观看| 中文字幕视频免费在线观看| 亚洲黄色片免费看| 全部免费毛片免费播放| 久章草在线精品视频免费观看| 亚洲一区中文字幕在线电影网 | 久久午夜夜伦鲁鲁片免费无码影视| 亚洲国产成人久久| 亚洲Av无码国产情品久久| 日韩电影免费在线观看| 亚洲乱码中文字幕在线| 亚洲精品二区国产综合野狼 | 3344永久在线观看视频免费首页 | 老司机精品免费视频|