`
mj4d
  • 浏览: 302937 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

python 操作excel之pyExcelerator

阅读更多

pyExcelerator

写道
pyExcelerator is a library for generating Excel 97/2000/XP/2003 and OpenOffice Calc compatible spreadsheets. pyExcelerator has full-blown support for UNICODE in Excel and Calc spreadsheets, allows using variety of formatting features, provides interface to printing options of Excel and OpenOffice Calc.

支持生成excel97+,支持OpenOffice。

写道
Main advantage is possibility of generating Excel spreadsheets without COM servers. The only requirement -- Python 2.4b2 or higher. From version 0.5 pyExcelerator can import data from Excel spreadsheets.

最主要的优势是不依赖于Windows/COM接口,需要注意的是python2.4+

 

  • 在ubuntu中的安装
sudo python setup.py install 

安装后,创建一个文件做简单测试:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from pyExcelerator import *

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

 执行:

chmod a+x excel.py
./excel.py

 在当前目录下可看到文件mini.xls。

 

  • pyExcelerator结构介绍

在应用pyExcelerator的时候,需要导入模块

from pyExcelerator import *

 进到该package中的信息,可以看到pyExcelerator的模块

from Workbook import Workbook
from Worksheet import Worksheet
from Row import Row
from Column import Column
from Formatting import Font, Alignment, Borders, Pattern, Protection
from Style import XFStyle
from ImportXLS import *
from ExcelFormula import *

 这里可以看到主要的划分目录,这也是excel中常见的模块:Workbook、Worksheet、Row、Column。其他还包括样式Formatting、Style模块,读取excel模块ImportXLS,支持公式的模块ExcelFormula。同时,在安装目录下有文件夹examples包含大量的使用实例

 

  • 生成一个excel的步骤

1、实例化Workbook

wb = Workbook()

 2、增加一个工作表Worksheet,获得工作表实例

ws = wb.add_sheet('sheet1')

 3、对Worksheet进行写数据、样式、合并等属性的操作

#这里写入数据,指定到具体的行、列。style指定样式,包括num_format_str、font、alignment、borders等
    def write(self, r, c, label="", style=Style.XFStyle()):
#合并单元格,指定起止的行、列
    def write_merge(self, r1, r2, c1, c2, label="", style=Style.XFStyle()):

 4、保存Workbook

wb.save()

在写入的时候,如果当前写入目录同文件名的文件打开,会抛出异常,如:

IOError: [Errno 13] Permission denied: 'mini.xls'

 

  • 一个简单的写入数据到excel的例子
w = Workbook()
ws = w.add_sheet('sheet')
#第一行作为header:注意是(0,0)作为第一行第一列
ws.write(0,0,u"姓名")
ws.write(0,1,u"年龄")
ws.write(0,2,u"班级")

data = [["aaaa",9,u"三年二班"], ["bbbb",9,u"三年二班"], ["cccc",9,u"三年二班"]]

#这里一般的处理是对数据循环,对应到sheet中的行列,写入数据
for i in range(len(data)):
    for j in range(len(data[i])):
        ws.write(i+1,j,data[i][j])
    i+=1

w.save('mini.xls')
 
  • 写入特定样式

在ws中的写方法提供了

def write(self, r, c, label="", style=Style.XFStyle()):

 其中style=Style.XFStyle()就是定义各种样式的参数,在Style.XFStyle()的构造函数中:

    def __init__(self):
        self.num_format_str  = _default_num_format#数字或日期的格式
        self.font            = _default_font.copy()#字体
        self.alignment       = _default_alignment.copy()#对齐方式
        self.borders         = _default_borders.copy()#边框
        self.pattern         = _default_pattern.copy()
        self.protection      = _default_protection.copy()

 这里以写入数字格式为例。在Style.py中StyleCollection定义了_std_num_fmt_list,对支持的数字格式做了说明,如:

_std_num_fmt_list = ['general','0','0.00','#,##0','#,##0.00','D-MMM-YY','D-MMM','MMM-YY',...]

 一般过程

    #实例一个style对象
    style = XFStyle()
    #设置相应的格式
    style.num_format_str = 'D-MMM-YY'
    ws.write(self, r, c, label="", style)

 一个写入数字格式的例子:

from datetime import datetime
num_data = ["123", "123.1232", "123.12", datetime.now(), datetime.now(), datetime.now()]
fmts =     ['general', '0.00', '#,##0.00', 'D-MMM-YY', 'h:mm:ss AM/PM','M/D/YY']

w = Workbook()
ws = w.add_sheet('sheet')

for i in range(len(num_data)):
    ws.write(i+1, 0, num_data[i])
    ws.write(i+1, 2, fmts[i])
    #写入样式
    style = XFStyle()
    style.num_format_str = fmts[i]
    ws.write(i+1, 4, num_data[i], style)
    i+=1

w.save('mini.xls')

  当然也可以设置字体格式

    style.font.name = 'Times New Roman'
    style.font.struck_out = True
    style.font.bold = True
    style.font.outline = True

 其中,字体的更多设置见字体见Style.py中_default_font = Formatting.Font()

 

pyExcelerator对excel的常见操作如合并单元格,冻结行列等都支持

  • 合并单元格
from pyExcelerator import *

#这里设置边框
borders = Borders()
borders.left = 1
borders.right = 1
borders.top = 1
borders.bottom = 1

#这里设置对齐方式
al = Alignment()
al.horz = Alignment.HORZ_CENTER
al.vert = Alignment.VERT_CENTER

style = XFStyle()
style.borders = borders
style.alignment = al

wb = Workbook()
ws = wb.add_sheet('sheet1')

#跨列合并
ws.write_merge(1, 1, 1, 5, u"这个合并(1,1)-(1,5)", style)
ws.write_merge(2, 2, 2, 3, u"这个合并(2,2)-(2,3)", style)
ws.write_merge(2, 2, 4, 5, u"这个合并(2,4)-(2,5)", style)
#跨行合并
ws.write_merge(2, 4, 1, 1, u"这个合并(2,1)-(4,1)", style)
ws.write_merge(3, 4, 2, 2, u"这个合并(3,2)-(4,2)", style)
ws.write_merge(3, 4, 3, 3, u"这个合并(3,3)-(4,3)", style)
ws.write_merge(3, 4, 4, 4, u"这个合并(3,4)-(4,4)", style)
ws.write_merge(3, 4, 5, 5, u"这个合并(3,5)-(4,5)", style)
#合并多行多列
ws.write_merge(1, 4, 6, 7, u"这个合并(1,6)-(4,7)", style)

wb.save('merged.xls')

 这里跨行合并的时候需要注意,不知道出于什么原因考虑,在合并的时候并不支持对同一列的跨行合并,见Cell.py中MulBlankCell的构造方法:

    def __init__(self, parent, col1, col2, xf_idx):
        assert col1 < col2, '%d < %d is false'%(col1, col2)
        self.__parent = parent
        self.__col1 = col1
        self.__col2 = col2
        self.__xf_idx = xf_idx

如果需要改功能,在源代码中注释掉这个断言即可 

 

  • 冻结行列

之前的操作是针对行列中某个写入的属性设置,比如Font、Alignment,如果设置冻结行、列则属于worksheet的操作。

在WorkSheet.py中Worksheet的构造函数设置了大量这样的属性,可以通过get/set方法进行设置。以下是对冻结行列的相关设置

self.__panes_frozen = 0
self.__vert_split_pos = None
self.__horz_split_pos = None
self.__vert_split_first_visible = None
self.__horz_split_first_visible = None

 如:

self.__panes_frozen = True
self.__vert_split_pos = 2  #垂直方向(列)冻结两列
self.__horz_split_pos = 2  #水平方向(行)冻结两列
ws4.panes_frozen = False
ws4.horz_split_pos = 20    #这个时候好像并不是指冻结20列
ws4.horz_split_first_visible = 4 #excel打开时初始显示在第四列,即excel的scrollbar显示在第四列的位置

  这个例子来自sample目录下:

# -*- coding: utf-8 -*-
from pyExcelerator import *

w = Workbook()
ws1 = w.add_sheet('sheet 1')
ws2 = w.add_sheet('sheet 2')
ws3 = w.add_sheet('sheet 3')
ws4 = w.add_sheet('sheet 4')
ws5 = w.add_sheet('sheet 5')
ws6 = w.add_sheet('sheet 6')

for i in range(0x100):
    ws1.write(i/0x10, i%0x10, i)

for i in range(0x100):
    ws2.write(i/0x10, i%0x10, i)

for i in range(0x100):
    ws3.write(i/0x10, i%0x10, i)

for i in range(0x100):
    ws4.write(i/0x10, i%0x10, i)

for i in range(0x100):
    ws5.write(i/0x10, i%0x10, i)

for i in range(0x100):
    ws6.write(i/0x10, i%0x10, i)

ws1.panes_frozen = True
ws1.horz_split_pos = 2

ws2.panes_frozen = True
ws2.vert_split_pos = 2

ws3.panes_frozen = True
ws3.horz_split_pos = 2
ws3.vert_split_pos = 2

ws4.panes_frozen = False
ws4.horz_split_pos = 20
#excel打开时初始显示在第四列,即excel的scrollbar显示在第四列的位置
ws4.horz_split_first_visible = 4 

ws5.panes_frozen = False
ws5.vert_split_pos = 40
ws4.vert_split_first_visible = 2

ws6.panes_frozen = False
ws6.horz_split_pos = 12
ws4.horz_split_first_visible = 2
ws6.vert_split_pos = 40
ws4.vert_split_first_visible = 2

w.save('panes.xls')
 
  • 设置行列高度

对行高、列宽的设置可以通过对Worksheet的属性设置来改变。Worksheet中提供了对col和row操作的方法

对列宽的设置

ws.col(i).width = 0

 行高没有相应的属性如height设置,可以通过style

ws.row(i).height = 0  #但是测试好像并没有效果

 可以通过字体样式来达到设置高度的目的

    fnt = Font()
    fnt.height = i*20
    style = XFStyle()
    style.font = fnt
    ws.row(i).set_style(style)

 例子如下:

w = Workbook()
ws = w.add_sheet('sheet')

for i in range(6, 80):
    fnt = Font()
    #这里设置字体的高度,可以用来设置行的高度。可没有宽度
    fnt.height = i*5
    style = XFStyle()
    style.font = fnt
    ws.write(1, i, 'Test', style) #也可以这样来设置行高
    ws.write(1, i, 'Test')
    #这里设置列宽,主要通过设置Worksheet中的col来操作,其底层也是通过设置Column.width来达到改变其宽度的目的
    ws.col(i).width = 0x0d00 + i*50
    #这里设置行高,通过设置字体高度
    ws.row(1).set_style(style)
w.save('width.xls')
 
  • 写入公式

pyExcelerator支持对excel公式的写入,主要在模块ExcelFormula,定义了公式的语法,解析等

主要体现在方法:Worksheet.write

在Worksheet的构造函数中,设置相关写入公式的属性设置,如

        self.__save_recalc = 0
        self.__frmla_opts = ExcelFormula.RecalcAlways | ExcelFormula.CalcOnOpen
        self.__show_formulas = 0

 这里设置公式参数,包括四个属性见ExcelFormula.py中:

NoCalcs                           #不计算
RecalcAlways                   #值改变时立即计算
CalcOnOpen                    #打开时计算
PartOfShareFormula        #这个啥意思:部分共享公式?求指点

 一个例子:

from pyExcelerator import *
import random

w = Workbook()
ws = w.add_sheet('sheet')
ws.frmla_opts=RecalcAlways
#ws.show_formulas = True

#写入一些数据
for i in range(30):
    for j in range(20):
        ws.write(i, j, random.randint(1, 100))
        
#这里写公式        
ws.write(30, 0, Formula("SUM(A1:A30)"))
ws.write(30, 2, Formula("SUM(B1:B30)*SUM(C1:C30)"))

 至于更复杂的公式就没尝试了,比如IF,SUMIF之类。其实我也不会写,不过在examples目录也有解析较复杂的例子

f = ExcelFormula.Formula(
""" -((1.80 + 2.898 * 1)/(1.80 + 2.898))*
AVERAGE((1.80 + 2.898 * 1)/(1.80 + 2.898); 
        (1.80 + 2.898 * 1)/(1.80 + 2.898); 
        (1.80 + 2.898 * 1)/(1.80 + 2.898)) + 
SIN(PI()/4)""")
 

 

 

 

分享到:
评论

相关推荐

    Python环境下用pyExcelerator操作Excel.pdf

    其中,pyExcelerator作为一款Python库,提供了操作Excel文件的能力,它不仅支持跨平台操作,而且可以处理Excel文件的格式化和打印设置,使得在非Windows环境下,如Linux系统中,也能有效地操作Excel文件。...

    Python环境下用pyExcelerator操作Excel.zip

    本篇文章将深入探讨如何在Python中使用pyExcelerator库来操作Excel文件。 首先,要开始使用pyExcelerator,你需要先安装它。通过pip,这一步非常简单: ```bash pip install pyExcelerator ``` 一旦安装完成,你...

    python写excel文件架包

    Python提供了多个库来方便地读写Excel文件,其中“python写excel文件架包”指的是用于创建、修改和操作Excel文件的软件包。下面我们将详细介绍几个常用的Python库以及它们的功能。 1. **xlrd**: 这是Python中用来...

    python 对excel的操作软件 pyExcelerater

    Python中的PyExcelerator库是一个强大的工具,用于读取和写入Excel文件,尤其适用于处理大量数据的场景。PyExcelerator不依赖Microsoft Excel,因此在没有安装Excel的环境中也能正常工作,这大大增加了其适用范围。 ...

    pyExcelerator导出excel插件

    pyExcelerator是Python编程语言中的一个第三方库,主要用于创建和修改Excel文件。这个库提供了一种高效的方式,使开发者能够方便地生成Excel工作簿(.xls格式)文件,而无需依赖Microsoft Office或者其他的外部软件...

    pyexcelerator-0.6.4.1.zip

    《PyExcelerator:Python中的Excel处理...通过掌握PyExcelerator的基本用法,可以有效提升Python项目中涉及Excel操作的效率。不过,根据具体需求,选择合适的库进行组合使用,才能更好地应对各种复杂的Excel处理场景。

    python库 excel插件 xlrd

    xlrd是一个基于python的可以读取excel文件的产品。和pyExcelerator相比,xlrd的主要特点在于读的功能比较强大,提供了表单行数、列数、单元格数据类型等pyExcelrator无法提供的详细信息,使得开发人员无须了解表单的...

    Python使用xlrd模块操作Excel数据导入的方法

    本文实例讲述了Python使用xlrd模块操作Excel数据导入的方法。分享给大家供大家参考。具体分析如下: xlrd是一个基于python的可以读取excel文件的产品。和pyExcelerator相比,xlrd的主要特点在于读的功能比较强大,...

    pyexcelerator

    《PyExcelerator:Python操作Excel文件的利器》 在Python编程世界中,处理Excel文件是一项常见的任务,而PyExcelerator正是这样一个强大的库,专为处理.xls格式的Excel文件而设计。这个开源项目使得Python程序员...

    pyexcelerator-0.6.4.1 及使用

    本文将深入探讨PyExcelerator库的使用方法,以及如何通过它来实现Python对Excel的读写操作。 首先,安装PyExcelerator库非常简单,可以通过Python的包管理工具pip进行安装: ```bash pip install pyexcelerator ``...

    pyexcelerator-0.6.3a.zip

    《Python中的pyExcelerator库:高效处理Excel文件的利器》 在Python编程环境中,处理Excel文件是一项常见的任务,尤其在数据分析、...通过熟练掌握这个库,你可以更高效地利用Python进行Excel文件操作,提升工作效率。

    Web 环境下处理Excel 文件的一种新方法.

    pyExcelerator是一个Python库,专门用于创建和操作Excel文件。与传统的Excel处理方式不同,pyExcelerator无需依赖Windows或Microsoft Excel软件,这意味着它可以在任何支持Python的平台上运行,提供了极高的灵活性。...

    基于Python第三方库实现Excel读写.pdf

    在数据处理方面,Python尤其出色,很多库如pyExcelerator和xlrd使得操作Excel文件变得简单高效。 知识点3:Excel文件处理需求 Excel是Windows平台下广泛使用的电子表格软件,能够处理大量数据,进行统计分析和辅助...

    python高手之路python处理excel文件(方法汇总)

    python处理excel文件主要是第三方模块库xlrd、xlwt、xluntils和pyExcelerator,除此之外,python处理excel还可以用win32com和openpyxl模块。 方法一: 小罗问我怎么从excel中读取数据,然后我百了一番,做下记录 ...

    Python第三方库在Excel文件读写中的应用.pdf

    本文主要探讨了Python第三方库在Excel文件读写中的应用,包括pyExcelerator和xlrd这两个库的具体使用方法和它们在实际操作中的优劣比较。 pyExcelerator是专门用于操作Excel文件的一个第三方类库模块。它不仅能够...

    python2.5.4相关软件合集

    3. **PyExcelerator**:PyExcelerator是一个用于读写Microsoft Excel文件(.xls)的Python库。它提供了一个简单易用的API来创建和修改Excel工作簿和工作表。PyExcelerator-0.6.4.1.zip是该库的源代码压缩包,开发者...

    python脚本实现数据导出excel格式的简单方法(推荐)

    pyExcelerator是Python的一个库,用于创建和修改Excel文件,而os库则用于处理文件和目录操作。 ```python from pyExcelerator import * import os ``` 接着,我们获取当前工作目录,并创建一个名为"Excel"的新目录...

    python 使用openpyxl 读写xlsx

    python有很多模块都是用来操作excel的,比如xlrd,xlwt,pyExcelerator。用着很方便,但是问题是,只能支持到excel2003。虽然一般的应用其实足够了,但是如果遇到了导出大量数据(超过65535条)的需求时,excel2003...

Global site tag (gtag.js) - Google Analytics