文章目录
第三章 Python写入excel数据之xlwt
1. Python写入excel文件内容
在日常工作中需要大量写入和创建表格,Python可以帮我们,只需要写入代码,就可以创建不同格式不同风格的表格。今天我们要了解xlwt这位朋友。xlwt是一个用于将数据和格式信息写入旧版Excel文件(即.xls文件)的库。可参考网址:https://xlwt.readthedocs.io/en/latest/
这是它的官方说明网站。
1.1 安装
像xlrd一样,在使用前,我们必须先安装。安装方法仍然是pip install xlwt
然后我们新建一个项目文件夹写今天的代码Lesson3。然后我们进入这个文件夹,打开jupyter notebook
我们打开项目就可以操作了,先new一个Python File。重命名为python写入excel文件内容。
1.2 写入数据的步骤
我们写入数据的步骤是:
- 创建工作簿
- 创建工作表
- 写入数据
下面是代码,注意看注释:
下面我们可以看到在项目文件夹中已经有了对应的Excel文件,注意,如果没有保存工作簿,是不会有对应文件生成的。保存的时候,一定要把文件扩展名保存为xls格式。
那么如何修改呢?可以直接在这里修改吗?如果我们在excel文件中是可以直接修改的,但是如果我们用python这里再次写入的话会报错。worksheet = workbook.add_sheet(‘sheet1’)
1.3 文件数据重写
如何解决这个问题呢?还记得在我们添加工作表的时候,传入的参数只有一个工作表名:worksheet = workbook.add_sheet(‘sheet1’)
其实它还有另外一个参数:workbook.add_sheet(‘工作表名’,cell_overwrite_ok=False)
就是是否允许重写,默认是False,是不允许重写的,我们重新传递一个True就可以了。
我们看到这里有一个新的表格sheet2,如果我们再重新写入也不会报错了。
但我们记得,保存的时候一定要将打开的本地excel关闭,否则你执行保存命令的时候还会报错如下:
保存命令不被允许,因为我们的表格是打开的。
2. excel表格字体样式的设置
日常办公中我们不仅仅写入数据,还会处理表头,字体,颜色,边框等等。
2.1 excel单元格样式
xlwt中有XFStyle这个库来对单元格的样式进行规范操作,下面的表格列出各种方法:
方法 | 作用 |
---|---|
Formatting.Font() | 字体设置 |
Formatting.Alignment() | 对齐设置 |
Formatting.Borders() | 边框设置 |
Formatting.Pattern | 背景颜色设置 |
当我们想设置单元格样式的时候,需要先实例化类XFStyle,以便于调用该类的方法。
xlwt.XFStyle 初始化样式
字体样式设置:
方法 | 作用 |
---|---|
xlwt.Font() | 创建字体对象 |
xlwt.Font().name | 设置字体 |
xlwt.Font().bold | 字体加粗 |
xlwt.Font().underline | 设置下划线 |
xlwt.Font().italic | 设置倾斜 |
xlwt.Font().color | 设置字体颜色 |
xlwt.Font().colour_index | 根据颜色索引来设置颜色 |
xlwt.Font().size | 设置字体大小 |
xlwt.Font().height | 设置行高 |
xlwt.Font().struck_out | 设置删除线 |
worksheet.col(indx).width | 设置单元格的宽度 |
当我们设置完以后,一定不要忘记将设置的字体对象,赋值给初始化样式对象。具体操作一下。
先新建一个文件夹Lesson4如前面一样,进到文件夹,打开jupyter,new一个新的python File重命名为“设置单元格样式”。
然后我们开始写代码:
注意看代码和注释,我们写完代码保存后,就生成了一个工作簿,我们打开看看:
这里姓名使用了我们定义的样式,名字没有。
下面我们设置一下列宽,注意看圈住的代码及注释:
保存后我们打开看一下,列变宽了。
3. 作业
要求,新建一个工作簿,新建一个工作表,在工作表里面写入1到100的数字,不同的数字用不同的颜色,数字与颜色的索引值一致。并且每十个数字换行。
3.1 第一步
我们先完成一部分,对一个单元格来输入内容,并传入样式参数。我们将所有的样式定义为一个函数,这样只需要调用这个函数就可以传入所有我们定义的样式了。
3.2 第二步
我们这一步尝试将该样式应用于(0,0)到(9,9)的单元格内,并且每个单元格写入一个数字从1到100,可以用循环。颜色用索引的方式,索引值也用循环来格式化一下,这样不同的字刚好是对应的颜色。
运行以后我们就得到了表格。由于颜色较淡的索引显示不出,我给表格填充深一点的背景反衬出来。
通过这个作业练习,我既熟悉了如何使用xlwt来写入数据,也验证了不同颜色的索引值。
4. 设置单元格边框样式
不仅可以设置字体,也可以设置单元格边框。边框线设置分为上、下、左、右边框的设置,不要也要先创建边框对象xlwt.Borders()。
边框样式设置 | 名称 |
---|---|
xlwt.Borders().top | 顶部 |
xlwt.Borders().left | 左边框 |
xlwt.Borders().right | 右边框 |
xlwt.Borders().bottom | 底部边框 |
边框的值也可以设置:
边框值 | 名称 |
---|---|
NO_LINE = 0×00 | 保持默认 |
THIN = 0×01 | 实线 |
DASHED = 0×03 | 虚线 |
MEDIUM = 0×02 | 中等 |
DOTTED = 0×04 | 点状 |
THICK = 0×05 | 粗线 |
DOUBLE = 0×06 | 双线 |
HAIR = 0×07 | 丝线 |
下面我们写代码练习一下,首先我们new一个python File,重命名为“边框设置练习”。
有很多的边框样式,我们可以通过xw.borders??来查看。
5. 设置单元格的对齐方式
要设置单元格的对其方式,首先要创建对其对象:
xlwt.Alignment()
单元格对其又分为水平对齐:
xlwt.Alignment().horz
垂直对齐:
xlwt.Alignment().vert
水平对齐又分为水平左对齐,右对齐,居中。垂直对齐又分为上对其,下对其,居中对齐。
对齐方式 | 对齐名称 |
---|---|
HORZ_GENERAL = 0×00 | 水平普通对齐 |
HORZ_LEFT = 0×01 | 水平左对齐 |
HORZ_CENTER = 0×02 | 水平居中对齐 |
HORZ_RIGHT = 0×03 | 水平右对齐 |
HORZ_FILLED = 0×04 | 水平填充 |
HORZ_ JUSTIFIED= 0×05 | 水平两端对齐 |
HORZ_CENTER _ACROSS_SEL= 0×06 | 水平穿过对齐 |
HORZ_DISTRIBUTED = 0×07 | 水平分散对齐 |
垂直对齐方式
对齐方式 | 对齐名称 |
---|---|
VERT_TOP = 0×00 | 水平普通对齐 |
VERT_CENTER = 0×01 | 垂直居中对齐 |
VERT_BOTTOM = 0×02 | 垂直底部对齐 |
VERT_ JUSTIFIED= 0×03 | 垂直两端对齐 |
VERT_DISTRIBUTED = 0×04 | 垂直分散对齐 |
下面我们练习一下,首先new一个python File,重命名为“设置单元格对齐方式”
我们查看这个类:
Init signature: xw.Alignment()
Docstring: <no docstring>
Source:
class Alignment(object):
HORZ_GENERAL = 0x00
HORZ_LEFT = 0x01
HORZ_CENTER = 0x02
HORZ_RIGHT = 0x03
HORZ_FILLED = 0x04
HORZ_JUSTIFIED = 0x05 # BIFF4-BIFF8X
HORZ_CENTER_ACROSS_SEL = 0x06 # Centred across selection (BIFF4-BIFF8X)
HORZ_DISTRIBUTED = 0x07 # Distributed (BIFF8X)
VERT_TOP = 0x00
VERT_CENTER = 0x01
VERT_BOTTOM = 0x02
VERT_JUSTIFIED = 0x03 # Justified (BIFF5-BIFF8X)
VERT_DISTRIBUTED = 0x04 # Distributed (BIFF8X)
DIRECTION_GENERAL = 0x00 # BIFF8X
DIRECTION_LR = 0x01
DIRECTION_RL = 0x02
ORIENTATION_NOT_ROTATED = 0x00
ORIENTATION_STACKED = 0x01
ORIENTATION_90_CC = 0x02
ORIENTATION_90_CW = 0x03
ROTATION_0_ANGLE = 0x00
ROTATION_STACKED = 0xFF
WRAP_AT_RIGHT = 0x01
NOT_WRAP_AT_RIGHT = 0x00
SHRINK_TO_FIT = 0x01
NOT_SHRINK_TO_FIT = 0x00
def __init__(self):
self.horz = self.HORZ_GENERAL
self.vert = self.VERT_BOTTOM
self.dire = self.DIRECTION_GENERAL
self.orie = self.ORIENTATION_NOT_ROTATED
self.rota = self.ROTATION_0_ANGLE
self.wrap = self.NOT_WRAP_AT_RIGHT
self.shri = self.NOT_SHRINK_TO_FIT
self.inde = 0
self.merg = 0
def _search_key(self):
return (
self.horz, self.vert, self.dire, self.orie, self.rota,
self.wrap, self.shri, self.inde, self.merg,
)
File: d:\python38\lib\site-packages\xlwt\formatting.py
Type: type
Subclasses:
举例代码:
6. 设置单元格背景颜色
虽然这个功能不常用到,我们还是介绍一下。步骤:
- xlwt.Pattern() # 创建背景对象
- xlwt.Pattern().pattern # 设置背景,比如实心填充(xlwt.Pattern().pattern.SOLID_PATTERN)
- xlwt.Pattern().pattern_fore_colour # 设置背景颜色(可直接填写颜色索引)
颜色索引如下:
索引 | 颜色 |
---|---|
0 | black |
1 | white |
2 | red |
3 | green |
4 | blue |
5 | yellow |
6 | magenta(紫红) |
7 | cyan(青色) |
我们直接举例,先创建python
文件,重命名为“设置单元格背景颜色”:
7. 样式练习
前面我们都举了例子,现在我们通过一个练习来总结一下。
我们新创建一个python文件,命名为“样式练习”。
我们打开项目文件夹看看,果然右一个工作簿test2,打开看看我们写入的数据:
我们看到完全是我们设置的样式。此次博客到此结束。