在发现 xlrd 之后不久就发现了 pyExcelerator ,它与 xlrd 不同,它主要是用来写 Excel 文件,当然读也是没有问题的。下面就它的使用简单地介绍一下。
一、Excel文件读取
from pyExcelerator import *
sheets = parse_xls(’d:/a.xls’)
很简单,与 xlrd 不同。xlrd 需要先调用book = xlrd.open_workbook(filename)打开文档,然后再调用sh = book.sheet_by_index(i)来得到第几个sheet,然后再使用sh.cell_value(i, j)得到i行j列的单元格的值。操作多了一点。而上面的parse_xls(filename)则直接返回一个列表,每一项就是一个sheet的数据。每项是一个二元组(表名,单元格数据)。其中单元格数据为一个字典,键值就是单元格的索引(i,j)。如果某个单元格无数据,那么就不存在这个值。看似简单,但从处理上不象 xlrd 一样,可以知道每个sheet的最大行数和列数,然后进行循环。而使用 pyExcelerator 好象没有最大行数和列数,再加上空数据又不存在,因此在处理上相对麻烦一些。这样在处理上还需要注意。它与 xlrd 一样都支持 unicode ,但好象没有 xlrd 一样方便地判断单元格的类型的方法,感觉还是 xlrd 在功能上可能要强一些。当然这只是个人感觉,再加上只是看了看例子,并没有怎么使用。
二、Excel文件写入
这个才是重头。那么安装好 pyExcelerator 之后,读了 Readme.txt 之后了解到它的文档正在进行当中,因此想多了解如何使用它需要看它所带的例子,甚至看源程序。下面是我从例子中了解的如何写一个 Excel 文档需要了解的。
为了方便,在导入这个模块中使用了import *的方式。
from pyExcelerator import *
首先导入模块,然后是生成工作薄。
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’)
这样上面的执行结果是生成一个空Excel文件,但它的第一个sheet的名字为“这是中文”。就这样,只要保证你写入时使用unicode就行了。
空文件可以生成,那么如何插入单元格呢?
ws.write(i, j, value)
其中value为值,可以是unicode。
接着,我们可能想改变单元格的样式,如字体:
font0 = Font()
font0.name = ‘Times New Roman’
font0.struck_out = True
font0.bold = Truestyle0 = XFStyle()
style0.font = font0
这样我们创建了一个字体,然后又生成了一个样式。注意,真正起作用的是样式,字体不过是样式中的一种效果。
这样在写入单元格时带着这个样式就行了,还是使用上面的write()方法:
ws.write(1, 1, ‘Test’, style0)
这是在名为ws的sheet中的第(1,1)单元格写入了值为"Test"的内容,并且它的样式为style0。
然后我们还可以设置单元格的边框:
borders = Borders()
borders.left = 5
style.borders = borders
上面创建了一个边框效果,设置了左边框,至于5是什么意思,我也不清楚,随便写的。然后放到样式中。上面的例子可以参考format.py程序。
其它还有许多的效果,简单地列一下:
| 示例名 | 说明 |
| col_width.py | 改变单元格宽度 |
| row_style.py | 设置行的高度 |
| merged*.py |
单元格合并 |
| image.py |
插入图片 |
| outline*.py |
大纲效果(以前真没用过) |
| wsprops.py |
sheet的属性值打印 |
| xls2*.py |
Excel转为其它的文件格式 |
大家有兴趣自已照着例子学吧。



呵呵,又学了一招.
xlp223 —— 2005年07月09日 @11:43 pm
具体的还没有试验,偷个懒。问问可以打开一个已经存在的xls文件 然后修改其中的内容吗?
ghiewa —— 2005年07月15日 @12:41 pm
在www.sf上 有好多 读写xls文件的 库,试验了几个均没有解决打开已经存在的文件 并修改其中的内容
过会儿 自己去试试了。
ghiewa —— 2005年07月15日 @12:44 pm
我也没有试过,但我的感觉是不行。
limodou —— 2005年07月15日 @1:04 pm
莫非还要去用 笨重的com? 不爽
ghiewa —— 2005年07月18日 @5:15 pm
刚好做文档用得上!多谢!limodou。
Goophy —— 2005年11月21日 @5:50 pm
http://tb.donews.net/TrackBack.aspx?PostId=460033
你给的这个链接为什么打不开呢 闷!!
KG —— 2008年03月31日 @3:30 pm
请问如何修改已经存在的excel文件中的某些表格的数据呢?
star —— 2008年04月20日 @10:29 am
打开后进行修改就行了。看一看它带的例子。
limodou —— 2008年04月20日 @12:05 pm
有没有可能更改header的字体和大小呢?要生成一个报告,头顶上都顶着同样的东西的。
cle —— 2008年04月25日 @3:02 am
您好,请问用pyExcelerator如何实现打印功能 ,从数据库中查出个人简历的信息并将其写入用pyExcelerator设计的excel模板,现在把这些信息打印出来,如何实现,请指教,我的邮箱:nyfz_1205@163.com,
MSN:xiaoshansong@myce.net.cn
匿名 —— 2008年04月29日 @9:34 am
请教一下,在您的文章中提到了“merged*.py 单元格合并 ”,能说一下具体的用法吗?多谢了!!
匿名 —— 2008年09月22日 @12:07 am
不知道有谁尝试过Excel2007?
张郎 —— 2008年11月20日 @11:34 am
这个模块不完善,建议使用pyXLWriter,不过这个模块python 2.5以上有一点小BUG,可以自己修复
pyXLWriter可以设置表格属性,而pyExcelerator不可以
陆嘉 —— 2008年11月24日 @5:41 pm
请教一下,我想读取excel表格的单元格格式,你知道怎么搞么?还有pyExcelerator哪里有官方的full usage….
谢谢~
bigfish —— 2009年04月23日 @12:31 pm
你好!!
请问知道怎么对Excel2007进行写入吗
luyl —— 2009年05月12日 @1:31 pm