上次我们看过了xlrd的使用方法,那么怎么对Excel执行修改操作的?对于旧版的Excel文件我们用xlwt,但是对于新版的xlsx文件,使用openpyxl更合适一些。
xlwt的使用比较简单,我们赶快开始学习吧
安装
安装和xlrd一样,pip install xlwt
创建对象
workbook = xlwt.Workbook()
创建表单对象
我们先来创建第一层Sheet
sheet1 = workbook.add_sheet(u'sheet1', cell_overwrite_ok=True)
这里有两个参数,第一个参数不用解释了吧,就是表单的名称,第二个参数cell_overwrite_ok
如果你设置为True,就表示覆盖了某个值不会抛异常,为False就不可以覆盖任何一个单元格内已经有值的数据。
设计表单的行列值
我们想设计一个这样的Excel:
思路是先创建第一行[u'姓名', u'年龄', u'性别', u'情感状态', u'合计']
,然后创建第一列:[u'小斌哥', u'貂蝉', u'刘备', u'小乔', u'大蛇丸']
,因为每一个第一列的值都对应四个状态,那么很好理解,是通过for循环进行遍历,第一列有几个值,我们就让他遍历几次,然后难得是这个合并单元格,第一列的这五个名字和第五列合计这一列我们看见他们都是合并了四行,列宽为一。想合并单元格要使用一个方法名为:表单名.write_merge
这个write_merge方法有六个参数,分别是①行,②想要合并几行,③列,④想要合并几列,⑤想改变哪个单元格的Style,⑥样式,后面两个属性可以为空,我们看看默认的样式是什么:
class XFStyle(object):
def __init__(self):
self.num_format_str = 'General'
self.font = Formatting.Font()
self.alignment = Formatting.Alignment()
self.borders = Formatting.Borders()
self.pattern = Formatting.Pattern()
self.protection = Formatting.Protection()
当然了如果你某列或者某行有特殊要求,完全OK,我们可以自己定义一个方法,去
自定义样式
def set_style(name, height, bold=False):
style = xlwt.XFStyle() # 初始化样式
font = xlwt.Font() # 为样式创建字体
font.name = name # 'Times New Roman'
font.bold = bold
font.color_index = 4
font.height = height
style.font = font
# style.borders = borders
return style
我们定义两个参数,字体样式的名字和字的大小。
接下来我们需要做以下的步骤:
①创建第一行
②创建第一列
③创建最后一列(因为第一列和最后一列都是合并四行一列)
④创建第四列
⑤保存文件
完成表单第一步:
for i in range(0, len(row0)):
sheet1.write(0, i, row0[i], set_style('Times New Roman', 220, True))
这四个参数分别是①第几行,②第几列,③这个单元格要填入什么值,④这个单元格什么样式
可以看出已经成功了
第二步和第三步:
生成第一列和最后一列(合并4行)
# 生成第一列和最后一列(合并4行)
i, j = 1, 0
while i < 4 * len(column0) and j < len(column0):
sheet1.write_merge(i, i + 3, 0, 0, column0[j], set_style('Arial', 220, True)) # 第一列
sheet1.write_merge(i, i + 3, 4, 4) # 最后一列"合计"
i += 4
j += 1
这个循环很好理解,但是第一眼看上去很麻烦,因为是以四行为一个单元格,所以i是一个d=4的递增数列,j是确定元组column0到第几个值了,我们看一下结果:
其实这就差不多了,我们再画蛇添足填下感情状态:
第四步
# 生成第四列
i = 0
while i < 4 * len(column0):
for j in range(0, len(status)):
sheet1.write(j + i + 1, 3, status[j])
i += 4
小提示:这就ok啦,如果你打开了这个Excel,那就无法保存了,IDE会报错的~
有问题欢迎评论区指正,觉得有用的拜托点个赞再走呗~这个对我真的很重要,谢谢!