【python】解析Excel中使用xlrd库、xlwt库操作,写入excel进阶完整脚本实例(五)

写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:
    这里写图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值