【python】解析Excel中使用xlrd库、xlwt库操作,写入excel进阶完整脚本实例(五)
写excel的难点可能不在构造一个workbook的本身,而是填充的数据,不过这不在范围内。在写excel的操作中也有棘手的问题,比如写入合并的单元格就是比较麻烦的,另外写入还有不同的样式。
本次拟构建以下即要用xlwt实现的东西:
完整脚本实例如下:
# -*- coding: utf-8 -*-"""Created on Thu Jan 18 00:26:42 2018excel写入操作脚本@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:
赞 (0)