有一次TE需要一個**資訊列表,我用python匯出了一個txt檔案丟給了他們,結果他們很不悅哇,呵呵,因為他們要把幾百項資料人肉到xls檔案中作為列表輸出,工作量太大,便要求我匯出成xls檔案然後再給他們,我以編程實現太難推脫了,今天看了下python操作excle的方法,發現相當簡單,呃,苦了TE們……
我在網上找了下,發現至少有兩種方法,第一種是直接操作excle的com庫,當然python內建的lib裡面已經給我們封裝好了實現,直接使用就可以了,win32com.client,這種方法甚至可以直接把excle的進程調用起來。用法很簡單,網上的文章也汗牛充棟,就不詳細解說了,給個小例子吧,嘻嘻。這種只能在windows下運行,並且需要安裝MS Excel。
# -*- coding: utf-8 -*-<br />from win32com.client import constants, Dispatch</p><p>xlsApp = Dispatch("Excel.Application")<br /># 通過賦值Visible為True或者False可以控制是否調出excle<br />xlsApp.Visible = 1</p><p># xlsBook = xlsApp.Workbooks.Open("c://magictong.xls")<br /># xlsSht = xlsBook.Worksheets("sheet1")</p><p>xlsBook = xlsApp.Workbooks.Add()<br />xlsSht = xlsBook.Sheets.Add()<br />xlsSht.Cells(2, 3).Value = "Tecent QQ"<br />xlsSht.Cells(2, 3).Font.Color = 0xff0000</p><p>xlsSht.Name = "GCD go to bell"<br />xlsBook.SaveAs("c://magictong.xls")<br />xlsApp.Quit()</p><p>print "__end"<br />
第二種方法是使用pyExcelerator開源庫,這個可以到http://sourceforge.net/projects/pyexcelerator/去下載,不過這個連結不是很好下,另外我傳了一份到csdn上面也可以去下,比較穩定,http://d.download.csdn.net/down/1884158/magictong。是一個zip包,解壓後的檔案如下:
examples目錄是給出的很多小例子,很全面,把這些例子搞明白,基本上使用pyExcelerator的基本方法你也就全搞明白了,其他目錄不用管了,tools目錄裡面是一些轉換工具,從xls檔案轉換到txt啦,html啦,有興趣也可以看看。下面說怎麼安裝吧,其實readme.txt裡面已經說的很清楚了,仔細看下這個檔案吧,嘿嘿,這個目錄下還有一個setup.py檔案,這個檔案是用於庫的安裝的,安裝方法是python setup.py install,在win32下直接寫個bat檔案把這句寫進去,放在和setup.py同一級目錄,直接運行就over了,裡面有cmd.bat檔案是我加在裡面的。
安裝好了,咱們就開始使用吧,先看看解析xls檔案,簡單幾句就搞定了:
from pyExcelerator import *<br />sheets = parse_xls("c:/a.xls")<br />print sheets
xls的源檔案如下所示:
輸出可不簡單:
[(u'Sheet1', {(0, 1): 1.0, (7, 3): 10.890000000000001, (0, 0): u'tonglei', (1, 1): u'qq', (2, 2): u'/u7acb/u91cc/u4e09/u77f3', (0, 3): 5.0, (0, 2): 2.0}), (u'Sheet2', {}), (u'Sheet3', {})]
仔細研究下這個資料,最外層是一個list,裡面有三個元組,對應三個sheet,每個元組有兩項資料,第一個是sheet的名字,如"Sheet1",第二項是一個字典,字典中的每一項的key是一個以xls檔案的行列兩項為元素的元組,而value就是該行列對應的數值,不過這個裡面的類型可能就不會像xls裡面那麼豐富了。得到了這些資料,能幹什麼……我就不說了。
再看看怎麼寫xls檔案:
# -*- coding: cp936 -*-<br />from pyExcelerator import *</p><p># 建立一個工作表<br />w = Workbook()<br /># 增加一個sheet並設定名稱<br />ws = w.add_sheet(u"中文的sheet")</p><p># 設定樣式<br />font0 = Font()<br />font0.name = 'Times New Roman'<br />font0.struck_out = True<br />font0.bold = True</p><p>style0 = XFStyle()<br />style0.font = font0</p><p>ws.write(1, 1, u"magictong", style0)<br />ws.write(1, 2, 45)</p><p># 我想寫一個數值<br />style1 = XFStyle()<br />style1.num_format_str = "0"<br />ws.write(2, 4, 12, style1)<br />ws.write(2, 5, 4, style1)</p><p># 儲存<br />w.save("c://mini.xls")
輸出xls檔案如下:
輸出格式是很多的,可以看一個內建的例子:
#!/usr/bin/env python<br /># -*- coding: windows-1251 -*-<br /># Copyright (C) 2005 Kiseliov Roman<br />__rev_id__ = """$Id: num_formats.py,v 1.1 2005/07/20 07:24:11 rvk Exp $"""</p><p>from pyExcelerator import *</p><p>w = Workbook()<br />ws = w.add_sheet('Hey, Dude')</p><p>fmts = [<br /> 'general',<br /> '0',<br /> '0.00',<br /> '#,##0',<br /> '#,##0.00',<br /> '"$"#,##0_);("$"#,##',<br /> '"$"#,##0_);[Red]("$"#,##',<br /> '"$"#,##0.00_);("$"#,##',<br /> '"$"#,##0.00_);[Red]("$"#,##',<br /> '0%',<br /> '0.00%',<br /> '0.00E+00',<br /> '# ?/?',<br /> '# ??/??',<br /> 'M/D/YY',<br /> 'D-MMM-YY',<br /> 'D-MMM',<br /> 'MMM-YY',<br /> 'h:mm AM/PM',<br /> 'h:mm:ss AM/PM',<br /> 'h:mm',<br /> 'h:mm:ss',<br /> 'M/D/YY h:mm',<br /> '_(#,##0_);(#,##0)',<br /> '_(#,##0_);[Red](#,##0)',<br /> '_(#,##0.00_);(#,##0.00)',<br /> '_(#,##0.00_);[Red](#,##0.00)',<br /> '_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)',<br /> '_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)',<br /> '_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)',<br /> '_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)',<br /> 'mm:ss',<br /> '[h]:mm:ss',<br /> 'mm:ss.0',<br /> '##0.0E+0',<br /> '@'<br />]</p><p>i = 0<br />for fmt in fmts:<br /> ws.write(i, 0, fmt)</p><p> style = XFStyle()<br /> style.num_format_str = fmt</p><p> ws.write(i, 4, -1278.9078, style)</p><p> i += 1</p><p>w.save('num_formats.xls')<br />
可以運行一下,看看都有些什麼格式的可以輸出,不過我找了下,不知道怎麼輸出一個標準的數值。
[END]