Python进阶教程m2e–Excel表格存写(xlwt)

原文链接:http://www.juzicode.com/python-tutorial-xlwt-excel

Python进阶教程m2d–xlrd读excel 中我们介绍了Excel表格的读取模块xlrd,今天这篇文章带大家了解Excel表格写存模块xlwt。他俩名字相近都以Excel的简写xl开头,rd是read的简写,wt是write的简写。

xlwt也是三方库,需要使用pip安装:

pip install xlwt

1、xlwt的基本用法

跟xlrd一样,也是按照三级结构:文件file-表页sheet-单元格cell 对Excel表格进行写存操作。

首先使用 xlwt.Workbook() 创建Excel写文件对象,会生成一个xlwt.Workbook.Workbook的实例wb:

import xlwt
wb = xlwt.Workbook()

然后用wb的add_sheet()方法添加一个sheet页,传入的参数为sheet页的名称:

ws = wb.add_sheet('juzicode')

再用add_sheet()生成ws实例的write()方法,直接对cell单元进行写入操作,cell单元的行和列的编号都是从0开始编号的,最左上角的单元格编号为(0,0),下面的例子在第0行第0列(对应excel表格的A1单元格)和第1行第3列(D2单元格)分别写入2个字符串:

ws.write(0,0,'juzicode.com')
ws.write(1,3,'vx:juzicode')

最后一步就是用wb.save()保存表格,传入的参数为保存文件的名称:

wb.save('output.xls')

打开生成的excel文件是这样的:

完整的例子如下:

#juzicode.com / VX公众号:juzicode
import xlwt
wb = xlwt.Workbook()
ws = wb.add_sheet('juzicode')
ws.write(0,0,'juzicode.com')
ws.write(1,3,'vx:juzicode')
wb.save('output.xls')

2、单元格数据类型

前面的例子中单元格写入的数据格式都是字符串,除了字符串,还可以写入数值类型、日期、bool值等,也可以是xlwt.Formula()计算结果。其中日期转换为Excel日期格式,该格式是从1899-12-31T00:00:00开始的浮点数值。bool类型会被转换为TRUE或者FALSE。

#juzicode.com/VX公众号:juzicode
import xlwt
import datetime

wb = xlwt.Workbook()
ws = wb.add_sheet('juzicode')

ws.write(0, 0, 3.14159265) # float
ws.write(1, 0, datetime.date(2025,1,31)) #date
ws.write(1, 1, datetime.time(23,25,27)) #time
ws.write(2, 0, 10) 
ws.write(2, 1, 19)
ws.write(2, 2, xlwt.Formula("A3+B3")) #计算公式,A3对应2,0 和 B3对应 2,1
ws.write(3, 0, '桔子code') #unicode
ws.write(4, 0, True) #bool
ws.write(4, 1, False) 

wb.save('output-data-type.xls')

生成的excel文件:

3、单元格格式

上节的例子中第2行的日期和时间看到效果是浮点数值,只有打开文件后选中单元格后右键设置单元格格式,转换为日期或者时间才能看到正确的数据。其实也可以在写入的时候就设定格式,这样打开文件就能看到正确的日期和时间了。

xlwt提供了easyxf()方法用来构建单元格格式的数据类型XFStyle,再传入到write()的第4个位置参数,就可以设置单元格格式了。

XFStyle 相关的格式有如下几种类型,这6种类型正好对应了excel表格中“设置单元格”场景下的标签页:

GroupAttributes
Number formatNumber format index (index to FORMAT record)
FontFont index (index to FONT record)
AlignmentHorizontal and vertical alignment, text wrap, indentation, orientation/rotation, text direction
BorderBorder line styles and colours
BackgroundBackground area style and colours
ProtectionCell locked, formula hidden

easyxf()方法有2个关键入参,一个是num_format_str,表示数据的格式 Number format ;一个是strg_to_parse,用来表示上表中除 Number format 以外的其他5种类型的属性。该方法返回的是 XFStyle 对象。

下面是一个浮点数值设置不同小数点后有效数值的例子,用到了 num_format_str 入参:

#juzicode.com/VX公众号:juzicode
import xlwt

wb = xlwt.Workbook()
ws = wb.add_sheet('juzicode')

ws.write(0, 0, 3.14159265,xlwt.easyxf(num_format_str='0.00')) #设置有效位数
ws.write(1, 0, 3.14159265,xlwt.easyxf(num_format_str='0.00000')) 
ws.write(2, 0, 3.14159265,xlwt.easyxf(num_format_str='00.00')) #前面补0
ws.write(3, 0, 1234563.14159265,xlwt.easyxf(num_format_str='0.00')) 
ws.write(4, 0, 1234563.14159265,xlwt.easyxf(num_format_str='#,##0.00'))  #设置千位分隔符

生成的文件:

num_format_str 入参还可以用来指定日期和时间类型的数据类型:

#juzicode.com/VX公众号:juzicode
import xlwt
import datetime

wb = xlwt.Workbook()
ws = wb.add_sheet('juzicode')

ws.write(0, 0, datetime.date(2025,1,31),xlwt.easyxf(num_format_str='dd/mm/yyyy')) 
ws.write(1, 0, datetime.date(2025,1,31),xlwt.easyxf(num_format_str='yyyy-mm-dd')) 

ws.write(2, 0, datetime.time(23,25,27),xlwt.easyxf(num_format_str='h:mm:ss')) 
ws.write(3, 0, datetime.time(23,25,27),xlwt.easyxf(num_format_str='h:mm AM/PM')) 
ws.write(3, 0, datetime.time(23,25,27),xlwt.easyxf(num_format_str='mm:ss')) 

wb.save('output-style-date-time.xls')

生成的文件:

前面的例子介绍了怎么设置数值格式,下面是一个设置字体、对齐方式、边框等格式的例子:

wb = xlwt.Workbook()
ws = wb.add_sheet('juzicode')

xf=xlwt.easyxf('font: bold on; align: wrap on, vert centre, horiz center',
                num_format_str='dd/mm/yyyy') #加粗,中心对齐
ws.write(0, 0, datetime.date(2025,1,31),xf) 
ws.col(0).width=50*256    # 256表示默认为1个字符宽度,这里设置50个字符跨度

xf=xlwt.easyxf('font: bold on, height 500 ; align: wrap on, vert top, horiz left',
                num_format_str='dd/mm/yyyy') #设置字体大小为500,加粗,左上对齐
ws.write(1, 0, datetime.date(2025,1,31),xf) 
ws.row(1).height_mismatch = True # 打开设置高度开关
ws.row(1).height = 60*20   # 20表示默认为1磅高度,这里设置行高为60磅

xf=xlwt.easyxf('font: bold on ; border: top 5, bottom 5,left 5, right 5',
                num_format_str='h:mm:ss')     # 边框加粗
ws.write(2, 0, datetime.time(23,25,27),xf)  

xf=xlwt.easyxf('font: italic on; pattern: pattern solid, fore-colour red',
                num_format_str='$#,##0.00000') #  italic字体,红底
ws.write(3, 0, 3.14159265,xf)  
            
wb.save('output-style-font-align.xls')

生成的文件:

tips

1、excel表格数值格式( num_format_str )的取值可以参考:打开excel文件–选中一个单元格–右键点击单元格–设置单元格格式–数字–自定义–类型。

2、xlwt当前的版本仅支持xls格式excel文件的写入,不支持xlsx格式。

扩展阅读:

  1. Python桔子教程
  2. Python进阶教程m2d–xlrd读excel

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注