python模块介绍- xlwt 创建xls文件(excel)
python模块介绍- xlwt 创建xls文件(excel)
2013-06-24磁针石
#承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq 37391319 博客:http://blog.csdn.net/oychw
# 深圳测试自动化python项目接单群113938272深圳广州软件测试开发6089740
#深圳地摊群 66250781武冈洞口城步新宁乡情群49494279
#自动化测试和python群组: http://groups.google.com/group/automation_testing_python
#参考资料:《The Python Standard Library by Example2011》
#https://pypi.python.org/pypi/xlwt/0.7.5
#http://www.python-excel.org/
Xlrd是跨平台的excel生成模块。
31.1 xlwt– 实例
31.1.1 创建简单的excel文件
下面例子,创建一个名为mini.xls的文件,它有一个空sheet:'xlwt was here'。
ws = w.add_sheet('xlwt was here')
Workbook类初始化时有encoding和style_compression参数。
encoding,设置字符编码,一般要这样设置:w = Workbook(encoding='utf-8'),就可以在excel中输出中文了。默认是ascii。当然要记得在文件头部添加:
Workbook还有一些属性:
Owner设置文档所有者。
country_code:国家码
wnd_protect:窗口保护
obj_protect:对象保护
Protect:保护
backup_on_save:保存时备份
Hpos:横坐标
Vpos:纵坐标
Width:宽度
Height:高度
active_sheet:活动sheet
tab_width:tab宽度
wnd_visible:窗口是否可见
wnd_mini:窗口最小化
hscroll_visible:横向滚动条是否可见。
vscroll_visible:纵向滚动条是否可见。
tabs_visible:tab是否可见。
dates_1904:是否使用1904日期系统
use_cell_values:单元格的值
default_style:默认样式
colour_RGB:颜色
比如设置国家码:
fromxlwt import *
w= Workbook()
w.country_code= 61
ws= w.add_sheet('AU')
w.save('country.xls')
方法有:add_style,add_font,add_str,del_str,str_index,add_rt,rt_index,add_sheet,get_sheet,raise_bad_sheetname,convert_sheetindex,setup_xcall,add_sheet_reference。
31.1.2 插入图片
add_sheet 会返回一个Worksheet 类。创建的时候有可选参数cell_overwrite_ok,表示是否可以覆盖单元格,其实是Worksheet实例化的一个参数,默认值是False。
Worksheet初始化的参数有sheetname,parent_book,cell_overwrite_ok。
函数构成的属性有:name,parent(只读),rows(只读),cols(只读),merged_ranges(只读),bmp_rec(只读),show_formulas,show_grid,show_headers,panes_frozen,auto_colour_grid,cols_right_to_left,show_outline,remove_splits,selected,sheet_visible,page_preview,first_visible_row,first_visible_col,grid_colour,preview_magn,normal_magn,scl_magn,vert_split_pos,horz_split_pos,vert_split_first_visible,horz_split_first_visible,show_auto_page_breaks,dialogue_sheet,auto_style_outline,outline_below,outline_right,fit_num_pages,show_row_outline,show_col_outline,alt_expr_eval,alt_formula_entries,row_default_height,col_default_width,calc_mode,calc_count,RC_ref_mode,iterations_on,delta,save_recalc,print_headers,print_grid,vert_page_breaks,horz_page_breaks,header_str,footer_str,print_centered_vert,print_centered_horz,left_margin,right_margin,top_margin,bottom_margin,paper_size_code,print_scaling,start_page_number,fit_width_to_pages,fit_height_to_pages,print_in_rows,portrait,print_colour,print_draft,print_notes,print_notes_at_end,print_omit_errors,print_hres,print_vres,header_margin,footer_margin,copies_num,wnd_protect,obj_protect,protect,scen_protect,password。
方法有:get_parent,write,write_rich_text,merge,write_merge,insert_bitmap,col,row,row_height,col_width。
ws.insert_bitmap('python.bmp', 2, 2)
ws.insert_bitmap('python.bmp', 10, 2)
31.1.3 设置样式
#Copyright (C) 2005 Kiseliov Roman
w.save('row_styles_empty.xls')
设置列宽:ws.col(i).width = 0x0d00 + i
31.1.4 更多实例
style1.num_format_str= 'D-MMM-YY'
ws= wb.add_sheet('A Test Sheet')
ws.write(1,0, datetime.now(), style1)
ws.write(2,2, xlwt.Formula("A3+B3"))
fromxlwt import ExcelFormulaParser, ExcelFormula
"""-((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)""")
合并单元格的实例,注意write_merge,1,2个参数表示行数,3,4的参数表示列数。
fromxlwt import *
wb= Workbook()
ws0= wb.add_sheet('sheet0')
fnt= Font()
fnt.name= 'Arial'
fnt.colour_index= 4
fnt.bold= True
borders= Borders()
borders.left= 6
borders.right= 6
borders.top= 6
borders.bottom= 6
style= XFStyle()
style.font= fnt
style.borders = borders
ws0.write_merge(3,3, 1, 5, 'test1', style)
ws0.write_merge(4,10, 1, 5, 'test2', style)
ws0.col(1).width= 0x0d00
wb.save('merged0.xls')
日期格式的实例
fromxlwt import *
fromdatetime import datetime
w= Workbook()
ws= w.add_sheet('Hey, Dude')
fmts= [
'M/D/YY',
'D-MMM-YY',
'D-MMM',
'MMM-YY',
'h:mm AM/PM',
'h:mm:ss AM/PM',
'h:mm',
'h:mm:ss',
'M/D/YY h:mm',
'mm:ss',
'[h]:mm:ss',
'mm:ss.0',
]
i= 0
forfmt in fmts:
ws.write(i, 0, fmt)
style = XFStyle()
style.num_format_str = fmt
ws.write(i, 4, datetime.now(), style)
i += 1
w.save('dates.xls')
下面展示了不同边框和删除样式的字体:
fromxlwt import *
font0= Font()
font0.name= 'Times New Roman'
font0.struck_out= True
font0.bold= True
style0= XFStyle()
style0.font= font0
wb= Workbook()
ws0= wb.add_sheet('0')
ws0.write(1,1, 'Test', style0)
fori in range(0, 0x53):
borders = Borders()
borders.left = i
borders.right = i
borders.top = i
borders.bottom = i
style = XFStyle()
style.borders = borders
ws0.write(i, 2, '', style)
ws0.write(i, 3, hex(i), style0)
ws0.write_merge(5,8, 6, 10, "")
wb.save('blanks.xls')
下面展示了不同颜色的字体,可以作为颜色参考:
from xlwt import *
font0 = Font()
font0.name = 'Times New Roman'
font0.struck_out = True
font0.bold = True
style0 = XFStyle()
style0.font = font0
wb = Workbook()
ws0 = wb.add_sheet('0')
ws0.write(1, 1, 'Test', style0)
for i in range(0, 0x53):
fnt = Font()
fnt.name = 'Arial'
fnt.colour_index = i
fnt.outline = True
borders = Borders()
borders.left = i
style = XFStyle()
style.font = fnt
style.borders =borders
ws0.write(i, 2,'colour', style)
ws0.write(i, 3,hex(i), style0)
wb.save('format.xls')
超级链接的插入方法:
fromxlwt import *
f= Font()
f.height= 20*72
f.name= 'Verdana'
f.bold= True
f.underline= Font.UNDERLINE_DOUBLE
f.colour_index= 4
h_style= XFStyle()
h_style.font= f
w= Workbook()
ws= w.add_sheet('F')
##############
##NOTE: parameters are separated by semicolon!!!
##############
n= "HYPERLINK"
ws.write_merge(1,1, 1, 10, Formula(n +'("http://www.irs.gov/pub/irs-pdf/f1000.pdf";"f1000.pdf")'),h_style)
ws.write_merge(2,2, 2, 25, Formula(n +'("mailto:roman.kiseliov@gmail.com?subject=pyExcelerator-feedback&Body=Hello,%20Roman!";"pyExcelerator-feedback")'),h_style)
w.save("hyperlinks.xls")
在没有指定编码的情况下,也可以通过unicode输出字符,不过这样比较费劲,建议还是使用utf-8编码:
fromxlwt import *
w= Workbook()
ws1= w.add_sheet(u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK SMALL LETTER BETA}\N{GREEKSMALL LETTER GAMMA}')
ws1.write(0,0, u'\N{GREEK SMALL LETTER ALPHA}\N{GREEK SMALL LETTER BETA}\N{GREEK SMALLLETTER GAMMA}')
ws1.write(1,1, u'\N{GREEK SMALL LETTER DELTA}x = 1 + \N{GREEK SMALL LETTER DELTA}')
ws1.write(2,0,u'A\u2262\u0391.') # RFC2152 example
ws1.write(3,0,u'Hi Mom -\u263a-!') # RFC2152 example
ws1.write(4,0,u'\u65E5\u672C\u8A9E') # RFC2152 example
ws1.write(5,0,u'Item 3 is \u00a31.') # RFC2152 example
ws1.write(8,0,u'\N{INTEGRAL}') # RFC2152 example
w.add_sheet(u'A\u2262\u0391.') # RFC2152 example
w.add_sheet(u'HiMom -\u263a-!') # RFC2152 example
one_more_ws= w.add_sheet(u'\u65E5\u672C\u8A9E') # RFC2152 example
w.add_sheet(u'Item3 is \u00a31.') # RFC2152 example
one_more_ws.write(0,0, u'\u2665\u2665')
w.add_sheet(u'\N{GREEKSMALL LETTER ETA WITH TONOS}')
w.save('unicode1.xls')
冻结:
fromxlwt 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')
fori in range(0x100):
ws1.write(i/0x10, i%0x10, i)
fori in range(0x100):
ws2.write(i/0x10, i%0x10, i)
fori in range(0x100):
ws3.write(i/0x10, i%0x10, i)
fori in range(0x100):
ws4.write(i/0x10, i%0x10, i)
fori in range(0x100):
ws5.write(i/0x10, i%0x10, i)
fori 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= 1
ws3.vert_split_pos= 1
ws4.panes_frozen= False
ws4.horz_split_pos= 12
ws4.horz_split_first_visible= 2
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')
各种数值格式:
fromxlwt import *
w= Workbook()
ws= w.add_sheet('Hey, Dude')
fmts= [
'general',
'0',
'0.00',
'#,##0',
'#,##0.00',
'"$"#,##0_);("$"#,##',
'"$"#,##0_);[Red]("$"#,##',
'"$"#,##0.00_);("$"#,##',
'"$"#,##0.00_);[Red]("$"#,##',
'0%',
'0.00%',
'0.00E+00',
'# ?/?',
'# ??/??',
'M/D/YY',
'D-MMM-YY',
'D-MMM',
'MMM-YY',
'h:mm AM/PM',
'h:mm:ss AM/PM',
'h:mm',
'h:mm:ss',
'M/D/YY h:mm',
'_(#,##0_);(#,##0)',
'_(#,##0_);[Red](#,##0)',
'_(#,##0.00_);(#,##0.00)',
'_(#,##0.00_);[Red](#,##0.00)',
'_("$"* #,##0_);_("$"*(#,##0);_("$"* "-"_);_(@_)',
'_(* #,##0_);_(* (#,##0);_(*"-"_);_(@_)',
'_("$"*#,##0.00_);_("$"* (#,##0.00);_("$"*"-"??_);_(@_)',
'_(* #,##0.00_);_(* (#,##0.00);_(*"-"??_);_(@_)',
'mm:ss',
'[h]:mm:ss',
'mm:ss.0',
'##0.0E+0',
'@'
]
i= 0
forfmt in fmts:
ws.write(i, 0, fmt)
style = XFStyle()
style.num_format_str = fmt
ws.write(i, 4, -1278.9078, style)
i += 1
w.save('num_formats.xls')
更多的公式:
fromxlwt import *
w= Workbook()
ws= w.add_sheet('F')
ws.write(0,0, Formula("-(1+1)"))
ws.write(1,0, Formula("-(1+1)/(-2-2)"))
ws.write(2,0, Formula("-(134.8780789+1)"))
ws.write(3,0, Formula("-(134.8780789e-10+1)"))
ws.write(4,0, Formula("-1/(1+1)+9344"))
ws.write(0,1, Formula("-(1+1)"))
ws.write(1,1, Formula("-(1+1)/(-2-2)"))
ws.write(2,1, Formula("-(134.8780789+1)"))
ws.write(3,1, Formula("-(134.8780789e-10+1)"))
ws.write(4,1, Formula("-1/(1+1)+9344"))
ws.write(0,2, Formula("A1*B1"))
ws.write(1,2, Formula("A2*B2"))
ws.write(2,2, Formula("A3*B3"))
ws.write(3,2, Formula("A4*B4*sin(pi()/4)"))
ws.write(4,2, Formula("A5%*B5*pi()/1000"))
##############
##NOTE: parameters are separated by semicolon!!!
##############
ws.write(5,2,Formula("C1+C2+C3+C4+C5/(C1+C2+C3+C4/(C1+C2+C3+C4/(C1+C2+C3+C4)+C5)+C5)-20.3e-2"))
ws.write(5,3, Formula("C1^2"))
ws.write(6,2, Formula("SUM(C1;C2;;;;;C3;;;C4)"))
ws.write(6,3, Formula("SUM($A$1:$C$5)"))
ws.write(7,0, Formula('"lkjljllkllkl"'))
ws.write(7,1, Formula('"yuyiyiyiyi"'))
ws.write(7,2, Formula('A8 & B8 & A8'))
ws.write(8,2, Formula('now()'))
ws.write(10,2, Formula('TRUE'))
ws.write(11,2, Formula('FALSE'))
ws.write(12,3, Formula('IF(A1>A2;3;"hkjhjkhk")'))
w.save('formulas.xls')
保护实例:
fromxlwt import *
fnt= Font()
fnt.name= 'Arial'
fnt.colour_index= 4
fnt.bold= True
borders= Borders()
borders.left= 6
borders.right= 6
borders.top= 6
borders.bottom= 6
style= XFStyle()
style.font= fnt
style.borders= borders
wb= Workbook()
ws0= wb.add_sheet('Rows Outline')
ws0.write_merge(1,1, 1, 5, 'test 1', style)
ws0.write_merge(2,2, 1, 4, 'test 1', style)
ws0.write_merge(3,3, 1, 3, 'test 2', style)
ws0.write_merge(4,4, 1, 4, 'test 1', style)
ws0.write_merge(5,5, 1, 4, 'test 3', style)
ws0.write_merge(6,6, 1, 5, 'test 1', style)
ws0.write_merge(7,7, 1, 5, 'test 4', style)
ws0.write_merge(8,8, 1, 4, 'test 1', style)
ws0.write_merge(9,9, 1, 3, 'test 5', style)
ws0.row(1).level= 1
ws0.row(2).level= 1
ws0.row(3).level= 2
ws0.row(4).level= 2
ws0.row(5).level= 2
ws0.row(6).level= 2
ws0.row(7).level= 2
ws0.row(8).level= 1
ws0.row(9).level= 1
ws1= wb.add_sheet('Columns Outline')
ws1.write_merge(1,1, 1, 5, 'test 1', style)
ws1.write_merge(2,2, 1, 4, 'test 1', style)
ws1.write_merge(3,3, 1, 3, 'test 2', style)
ws1.write_merge(4,4, 1, 4, 'test 1', style)
ws1.write_merge(5,5, 1, 4, 'test 3', style)
ws1.write_merge(6,6, 1, 5, 'test 1', style)
ws1.write_merge(7,7, 1, 5, 'test 4', style)
ws1.write_merge(8,8, 1, 4, 'test 1', style)
ws1.write_merge(9,9, 1, 3, 'test 5', style)
ws1.col(1).level= 1
ws1.col(2).level= 1
ws1.col(3).level= 2
ws1.col(4).level= 2
ws1.col(5).level= 2
ws1.col(6).level= 2
ws1.col(7).level= 2
ws1.col(8).level= 1
ws1.col(9).level= 1
ws2= wb.add_sheet('Rows and Columns Outline')
ws2.write_merge(1,1, 1, 5, 'test 1', style)
ws2.write_merge(2,2, 1, 4, 'test 1', style)
ws2.write_merge(3,3, 1, 3, 'test 2', style)
ws2.write_merge(4,4, 1, 4, 'test 1', style)
ws2.write_merge(5,5, 1, 4, 'test 3', style)
ws2.write_merge(6,6, 1, 5, 'test 1', style)
ws2.write_merge(7,7, 1, 5, 'test 4', style)
ws2.write_merge(8,8, 1, 4, 'test 1', style)
ws2.write_merge(9,9, 1, 3, 'test 5', style)
ws2.row(1).level= 1
ws2.row(2).level= 1
ws2.row(3).level= 2
ws2.row(4).level= 2
ws2.row(5).level= 2
ws2.row(6).level= 2
ws2.row(7).level= 2
ws2.row(8).level= 1
ws2.row(9).level= 1
ws2.col(1).level= 1
ws2.col(2).level= 1
ws2.col(3).level= 2
ws2.col(4).level= 2
ws2.col(5).level= 2
ws2.col(6).level= 2
ws2.col(7).level= 2
ws2.col(8).level= 1
ws2.col(9).level= 1
ws0.protect= True
ws0.wnd_protect= True
ws0.obj_protect= True
ws0.scen_protect= True
ws0.password= "123456"
ws1.protect= True
ws1.wnd_protect= True
ws1.obj_protect= True
ws1.scen_protect= True
ws1.password= "abcdefghij"
ws2.protect= True
ws2.wnd_protect= True
ws2.obj_protect= True
ws2.scen_protect= True
ws2.password= "ok"
wb.protect= True
wb.wnd_protect= True
wb.obj_protect= True
wb.save('protection.xls')
31.1.5 完整实例
下面程序的write_xls对输出xls进行了一定封装,比较有实用意义。
#Write an XLS file with a single worksheet, containing
#a heading row and some rows of data.
importxlwt
importdatetime
ezxf= xlwt.easyxf
defwrite_xls(file_name,sheet_name, headings, data, heading_xf, data_xfs):
sheet = book.add_sheet(sheet_name)
for colx, value in enumerate(headings):
sheet.write(rowx, colx, value,heading_xf)
sheet.set_panes_frozen(True) # frozenheadings instead of split panes
sheet.set_horz_split_pos(rowx+1) # ingeneral, freeze after last heading row
sheet.set_remove_splits(True) # if userdoes unfreeze, don't leave a split there
for colx, value in enumerate(row):
sheet.write(rowx, colx, value,data_xfs[colx])
hdngs = ['Date', 'Stock Code', 'Quantity','Unit Price', 'Value', 'Message']
kinds = 'date text int price money text'.split()
[mkd(2007, 7, 1), 'ABC', 1000,1.234567, 1234.57, ''],
[mkd(2007, 12, 31), 'XYZ', -100,4.654321, -465.43, 'Goods returned'],
[mkd(2008, 6, 30), 'PQRCD', 100,2.345678, 234.57, ''],
heading_xf = ezxf('font: bold on; align:wrap on, vert centre, horiz center')
'date':ezxf(num_format_str='yyyy-mm-dd'),
'int': ezxf(num_format_str='#,##0'),
'money': ezxf('font: italic on;pattern: pattern solid, fore-colour grey25',
'price': ezxf(num_format_str='#0.000000'),
data_xfs = [kind_to_xf_map[k] for k inkinds]
write_xls('xlwt_easyxf_simple_demo.xls','Demo', hdngs, data, heading_xf, data_xfs)
python模块介绍- xlwt 创建xls文件(excel)相关推荐
- python写入excel公式有哪些库_python工具库介绍-xlwt 创建xls文件(excel)
简介 参考资料: 下载地址:xlwt 文件备份地址:qq群:630011153 技术支持qq群: 144081101 591302926 567351477 钉钉免费群:21745728 快速入门 下 ...
- python模块 之 xlwt模块
1. 模块简介 1)xlrd是可用于对excel表格进行写操作的(不支持读操作,读操作需要xlrd模块实现) 2)仅支持 xls 格式的excel表格(xlwt支持Excel versions 95 ...
- 使用 Python 第三方库 xlwt 写入数据到 Excel 工作表
使用 Python 第三方库 xlwt 写入数据到 Excel 工作表 1. 安装 xlwt 库 2. 使用 xlwt 库 2.1 向 Excel 工作表写入单个数据 2.2 向 Excel 工作表写 ...
- python模块介绍-locustio:性能测试工具locustio
转自:http://automationtesting.sinaapp.com/blog/m_locustio_doc python测试文章 http://weibo.com/cizhenshi?is ...
- python模块介绍-gevent介绍:基于协程的网络库
2019独角兽企业重金招聘Python工程师标准>>> python模块介绍-gevent介绍:基于协程的网络库 介绍 gevent是基于协程的Python网络库.特点: 基于lib ...
- Python语言学习:创建/删除文件/文件夹、获取当前文件/文件夹路径(系统环境路径/目录)、获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略
Python语言学习:创建/删除文件/文件夹.获取当前文件/文件夹路径(系统环境路径/目录).获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略 目录 系统环境路径的设置 1.sys ...
- 【收藏】GeoMesa整体架构模块介绍、创建Schema并导入数据
geomesa-accumulo:基于 Apache Accumulo的DataStore 实现 geomesa-archetypes: Maven构建模板 geomesa-arrow: 基于 Apa ...
- python数据存储系列教程——xls文件的读写、追加(xlwt、xlwt、xlutils)
全栈工程师开发手册 (作者:栾鹏) python教程全解 python将数据存储到excel文件.本文不通过与操作excel办公软件而是偏向于excel文件的处理.如果你需要通过python控制exc ...
- python从word中提取信息导入excel_使用python模块win32com提取word表格到excel
由于工作的要求,需要将word文档里的表格提取出来放到excel里面.表格结构比较复杂,且一篇word里面有多个表格.对于一个word文档来说提取很简单,只要选中表格,然后复制黏贴到excel里面就可 ...
最新文章
- 人工脑连接体:类脑人工智能的奇点时刻来临
- maven 编译mybatis项目时xml文件无法编译到target目录下的解决方法
- html引入iview如何修改样式,vue中如何修改iView的样式,
- alv tree 总结
- 360 自动打开word_Word文档高手的组合键用法,你知道几个?
- src/main/resorces applicationContext.xml
- 【SICP练习】71 练习2.42
- Python之千与千寻豆瓣短评词云秀
- (2)二进制文件方式部署Kubernetes高可用集群----------部署环境准备
- java初学者代码练习题
- 石头科技财报背后:不甘再当小米打工仔?
- java mp4转码 h264_mp4格式的视频,编码方式mpeg4,转化为h264
- linux sqlplus dmp文件,sqlplus导入dmp数据库
- synchronized加锁过程
- 巨头特斯拉的进击之路
- 和平之翼代码生成器 SHCEU 版 4.0.0 Beta2 版 千年隼公布
- js base64加密 java base64解密_JS base64 加密和 后台 base64解密(防止中文乱码)
- 数据库binlog(二进制日志binary log)
- Openbravo架构分析
- 推荐系统之深度兴趣进化网络DIEN