码迷,mamicode.com
首页 > 编程语言 > 详细

python 写 excel 模块 : xlwt

时间:2018-01-08 21:12:15      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:不同   dex   gpo   als   xls   class   这不   跨行   ring   

主要来自:[ python中使用xlrd、xlwt操作excel表格详解 ]

为了方便阅读, 我将原文两个模块拆分为两篇博文:

[ python 读 excel 模块: xlrd ]

[ python 写 excel 模块: xlwt ]


xlwt

写excel的难点可能不在构造一个workbook的本身,而是填充的数据,不过这不在范围内。在写excel的操作中也有棘手的问题,比如写入合并的单元格就是比较麻烦的,另外写入还有不同的样式。

现在完成如下一个 excel 的表格 :

技术分享图片

python code

‘‘‘
设置单元格样式
‘‘‘
 
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
 
#写excel
def write_excel():
    f = xlwt.Workbook() #创建工作簿

    ‘‘‘
    创建第一个sheet:
    sheet1
    ‘‘‘
    sheet1 = f.add_sheet(u‘sheet1‘,cell_overwrite_ok=True) #创建sheet
    row0 = [u‘业务‘,u‘状态‘,u‘北京‘,u‘上海‘,u‘广州‘,u‘深圳‘,u‘状态小计‘,u‘合计‘]
    column0 = [u‘机票‘,u‘船票‘,u‘火车票‘,u‘汽车票‘,u‘其它‘]
    status = [u‘预订‘,u‘出票‘,u‘退票‘,u‘业务小计‘]
 
    #生成第一行
    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(21,21,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])
        i += 4
 
    f.save(‘demo1.xlsx‘) #保存文件
 
if __name__ == ‘__main__‘:
    #generate_workbook()
    #read_excel()
    write_excel()


需要稍作解释的就是 write_merge 方法:

write_merge(x, x + m, y, w + n, string, sytle)

x表示行,y表示列,m表示跨行个数,n表示跨列个数,string表示要写入的单元格内容,style表示单元格样式。其中,x,y,w,h,都是以0开始计算的。这个和xlrd中的读合并单元格的不太一样。

如上述:sheet1.write_merge(21,21,0,1,u‘合计‘,set_style(‘Times New Roman‘,220,True),即在22行合并第1,2列,合并后的单元格内容为"合计",并设置了style。

如果需要创建多个sheet,则只要 f.add_sheet 即可。

如在上述write_excel函数里f.save(‘demo1.xlsx‘) 这句之前再创建一个sheet2,效果如下:
技术分享图片

python code


def write_sheet2():
    sheet2 = f.add_sheet(u‘sheet2‘,cell_overwrite_ok=True) #创建sheet2
    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,‘1991/11/11‘)
    sheet2.write_merge(7,7,2,4,u‘暂无‘) #合并列单元格
    sheet2.write_merge(1,2,4,4,u‘好朋友‘) #合并行单元格

    f.save(‘demo1.xlsx‘) #保存文件

python 写 excel 模块 : xlwt

标签:不同   dex   gpo   als   xls   class   这不   跨行   ring   

原文地址:https://www.cnblogs.com/tiantiandas/p/python_xlwt.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!