写excel的难点可能不在构造一个workbook的本身,而是填充的数据,不过这不在范围内。在写excel的操作中也有棘手的问题,比如写入合并的单元格就是比较麻烦的,另外写入还有不同的样式。
本次拟构建以下即要用xlwt实现的东西:
完整脚本实例如下:
# -*- coding: utf-8 -*-
"""
Created on Thu Jan 18 00:26:42 2018
excel写入操作脚本
@author: BruceWong
"""
'''''
设置单元格样式
'''
import xlwt
#设置单元格格式
def set_style(name,height,bold=False):
# 初始化样式
style = xlwt.XFStyle()
# 为样式创建字体
font = xlwt.Font()
font.name = name
font.bold = bold
font.color_index = 4
font.height = height
# 为样式创建边界
borders= xlwt.Borders()
borders.left= 6
borders.right= 6
borders.top= 6
borders.bottom= 6
#将创建的字体和边界写入
style.font = font
style.borders = borders
#返回初始化的结果
return style
#写excel函数
def write_excel():
#创建工作簿,首要的第一步
f = xlwt.Workbook()
'''
创建第一个sheet: sheet1
'''
#使用add_sheet创建sheet1
sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True)
row0 = [u'姓名',u'状态',u'数学',u'语文',u'英语',u'合计',u'总计']
column0 = [u'小王',u'小丽',u'小黑',u'大锤']
status = [u'月考',u'段考',u'期考',u'小计']
#生成第一行,写入的函数是write
for i in range(0,len(row0)):
sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True))
#生成第一列和最后一列(合并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,7,7) #最后一列"合计"
i += 4
j += 1
#生产合计栏
sheet1.write_merge(17,17,0,1,u'合计',set_style('Times New Roman',220,True))
#生成第二列
i = 0
while i < 4*len(column0):
for j in range(0,len(status)):
sheet1.write(j+i+1,1,status[j],set_style('Times New Roman',220,True))
i += 4
#保存文件
f.save('example_excel_write.xls')
'''
创建第二个sheet: sheet2
'''
#创建sheet2
sheet2 = f.add_sheet(u'sheet2',cell_overwrite_ok=True)
row0 = [u'姓名',u'年龄',u'出生日期',u'爱好',u'关系']
column0 = [u'小王',u'小丽',u'小黑',u'小白',u'小红',u'小米',u'大锤']
#生成第一行
for i in range(0,len(row0)):
sheet2.write(0,i,row0[i],set_style('Times New Roman',220,True))
#生成第一列
for i in range(0,len(column0)):
sheet2.write(i+1,0,column0[i],set_style('Times New Roman',220))
sheet2.write(1,2,'1990/1/11')
#合并列单元格
'''merged_cells返回的这四个参数的含义是:(row,row_range,col,col_range),
其中[row,row_range)包括row,不包括row_range;col也是一样
(1, 3, 4, 5)的含义是:第2到3行(不包括4)合并,(3, 7, 4, 5)的含义是:第5到5列合并。
'''
#merged_cell 和 write_merge略有区别,这里要注意merged_cell不包含右边,而write_merge是包含两个边的
#merge_cell 与 write_merge两者都是从0开始算起的
'''write_merge设定的四个参数的含义是:(row,row_range,col,col_range),
其中[row,row_range)包括row,包括row_range;col也是一样
(4, 7, 4, 5)的含义是:第5到8行合并,第5到6列合并。
'''
sheet2.write_merge(4,7,4,5,u'同学')
sheet2.write_merge(2,3,4,4,u'朋友')
f.save('example_excel_write.xls') #保存文件
if __name__ == '__main__':
write_excel()
最终效果如下:
- 表格sheet1:
- 表格sheet2: