使用Python处理微软Excel的xls文件,主要涉及到3个Python包或模块:xlrd、xlwt和xlutils。
xlrd xlwt 和 xlutils
- xlrd
用于读取xls文件中的内容,不可修改文件中的内容。读取xls文件得到一个Book
对象。
- xlwt
用于向xls文件中写入内容,无法获取xls中的内容。生成的xls文件是一个Workbook
对象。
- xlutils
可将xlrd.Book
的数据复制到xlwt.Workbook
,以实现对读取的xls文件进行编辑的目的。
以上可以使用pip
来完成安装:
1 | pip install xlrd |
简单示例
先看一个简单示例,生成一个test.xls文件,然后读取该文件。
1 | # -*- coding: utf-8 -*- |
主要的API
xlrd
主要涉及到3个类,Book
、Sheet
、Cell
,分别对应xls文件(工作簿)、工作表、单元格。
1 | # 加载xls文件,返回一个Book对象 |
xlwt
主要涉及到3个类:Workbook
对应工作簿文件,Worksheet
对应工作表,XFStyle
对象用于控制单元格格式(XF record)。
1 | # 创建Workbook对象 |
XFStyle
用于指定单元格内容格式,使用easyxf
函数来得到一个XFStyle
对象。
1 | xlwt.Style.easyxf(strg_to_parse='', num_format_str=None, field_sep=', ', line_sep=';', intro_sep=':', esc_char='\\', debug=False) |
strg_to_parse
是定义了格式的字符串,可以控制的格式属性包括字体(font
)、对齐方式(align
)、边框形式(border
)、颜色样式(pattern
)和单元格保护(protection
)等,具体的格式属性在文章末尾详细列出。
字符串strg_to_parse
语法格式如下:
1 | (<element>:(<attribute> <value>,)+;)+ |
例如
1 | 'font: bold on; align: wrap on, vert centre, horiz center' # 字体加粗 对齐方式 允许换行 垂直居中 水平居中 |
参数字符串num_format_str
用于指定数字的格式,例如:
1 | "#,##0.00" |
以下是xlwt.Style.easyxf
的一些用例:
1 | style1 = easyxf('font: name Times New Roman') |
xlutils
依赖xlrd
和 xlwt
,主要包含以下模块:
- xlutils.copy
可将xlrd.Book对象复制到xlwt.Workbook对象 - xlutils.display
更好友好更安全地显示xlrd相关对象的信息 - xlutils.filter
用于分割和过滤现有Excel文件到新Excel文件的小型框架 - xlutils.margins
获取Excel文件中包含有多少有用信息 - xlutils.save
将xlrd.Book对象序列化为Excel文件的工具 - xlutils.styles
用于处于Excel文件中格式信息的工具 - xlutils.view
使用workbook中工作表的视图信息
主要介绍两个函数的使用,第一个xlutils.copy.copy(wb)
:
xlutils.copy.copy(wb)
将一个xlrd.Book
对象中的内容复制到一个xlwt.Workbook
对象,并尽量多的保留其中的信息。
1 | from os.path import join |
另一个是xlutils.filter
中的函数xlutils.filter.process(reader, *chain)
:
模块xlutils.filter
中包含有一些内置的模块reader
、writer
和filter
,以及用于将它们串联起来的函数process()
,主要功能是过滤和分割Excel文件。
reader
用于从数据源中获取数据,并将其转化为一系列xlrd.Book
对象,然后会调用第一个filter相关的方法。模块内提供有一些基础的reader
类。filter
用户获取特定任务需要的结果,在filter
中必须要定义一些特定的方法,这些方法的实现中可以根据需要填写任意功能,但通常会以调用下一个filter
的对应方法作为结束。writer
会处理参数链中最后一个filter
中特定的方法。writer
通常用于从数据源复制信息并将其写入输出文件。由于在writer
中涉及到很多工作而通常只有向目标位置写入二进制数据会略有不同,模块内也提供了一些基础的writer
类。process(reader, *chain)
可以将内置或自定义的reader
、writer
和 filter
串联起来执行。
接下来是一个完整的示例:
1 | import os |
XFStyle格式
格式属性
- font
- bold
布尔值,默认为False
- charset
可选值见下节,默认值是sys_default
- colour (或color_index、 colour_index、 color )
可选值见下节,默认值是automatic
- escapement
可选值为none
、superscript
或subscript
,默认值none
- family
包含字体的font family的字符串,默认值None
- height
使用20乘以point size得到的高度值,默认是200,对应10pt - italic
布尔值,默认为False
- name
包含字体名称的字符串,默认为Arial
- outline
布尔值,默认为False
- shadow
布尔值,默认为False
- struck_out
布尔值,默认为False
- underline
布尔值或者none
、single
、single_acc
、double
、double_acc
其中之一。默认值是none
- bold
- alignment(或align)
- direction(或dire)
general
、lr
、rl
之一,默认值general
- horizontal(或horiz、horz)
One of the following:general
、left
、center|centre
、right
、filled
、justified
、center|centre_across_selection
、distributed
其中之一,默认值是general
- indent(或inde)
缩进值0到15,默认值0 - rotation(或rota)
-90到+90之间的整数值或stacked
、none
之一,默认值是none
- shrink_to_fit(或shri、shrink)
布尔值,默认为False
- vertical(或vert)
top
、center|centre
、bottom
、justified
、distributed
其中之一,默认为bottom
- wrap
布尔值,默认为False
- direction(或dire)
- borders(或border)
- left
边框样式,详见下节 - right
边框样式,详见下节 - top
边框样式,详见下节 - bottom
边框样式,详见下节 - diag
边框样式,详见下节 - left_colour(或left_color)
颜色值,详见下节,默认为automatic
- right_colour(或right_color)
颜色值,详见下节,默认为automatic
- top_colour(或top_color)
颜色值,详见下节,默认为automatic
- bottom_colour(或bottom_color)
颜色值,详见下节,默认为automatic
- diag_colour(或diag_color)
颜色值,详见下节,默认为automatic
- need_diag_1
布尔值,默认为False
- need_diag_2
布尔值,默认为False
- left
pattern
back_colour(或back_color、pattern_back_colour、pattern_back_color)
颜色值,详见下节,默认为automatic
fore_colour(或fore_color、pattern_fore_colour、pattern_fore_color)
颜色值,详见下节,默认为automatic
pattern
no_fill
、none
、solid
、solid_fill
、solid_pattern
、fine_dots
、alt_bars
、sparse_dots
、thick_horz_bands
、thick_vert_bands
、thick_backward_diag
、thick_forward_diag
、big_spots
、bricks
、thin_horz_bands
、thin_vert_bands
、thin_backward_diag
、thin_forward_diag
、squares
、diamonds
其中之一,默认为none
- protection
- cell_locked
布尔值,默认为True
- formula_hidden
布尔值,默认为False
- cell_locked
取值说明
布尔型
True
可以表示为1
、 yes
、 true
或 on
;
False
可以表示为0
、 no
、 false
或 off
。
charset
字符集的可选值如下:
1 | ansi_latin, sys_default, symbol, apple_roman, |
color
颜色可选值如下:
aqua | dark_red_ega | light_blue | plum |
black | dark_teal | light_green | purple_ega |
blue | dark_yellow | light_orange | red |
blue_gray | gold | light_turquoise | rose |
bright_green | gray_ega | light_yellow | sea_green |
brown | gray25 | lime | silver_ega |
coral | gray40 | magenta_ega | sky_blue |
cyan_ega | gray50 | ocean_blue | tan |
dark_blue | gray80 | olive_ega | teal |
dark_blue_ega | green | olive_green | teal_ega |
dark_green | ice_blue | orange | turquoise |
dark_green_ega | indigo | pale_blue | violet |
dark_purple | ivory | periwinkle | white |
dark_red | lavender | pink | yellow |
borderline
可以是0到13的整数值,或者以下值其中之一:
1 | no_line, thin, medium, dashed, dotted, thick, double, hair, |
REFERENCE
https://github.com/python-excel
http://xlrd.readthedocs.io/en/latest/
http://xlwt.readthedocs.io/en/latest/api.html
http://xlutils.readthedocs.io/en/latest/