python处理excel(二):写
基本的write函数接口很简单:
新建一个excel文件
file = xlwt.Workbook() (注意这里的Workbook首字母是大写)
新建一个sheet
table = file.add_sheet('sheet_name')
写入数据table.write(行,列,value)
table.write(0,0,'test')
如果是写入中文,则要用u'汉字'的形式。比如
table.write(0,0, u'汉字')
合并单元格:
table.write_merge(x, x + m, y, y + n, string, style)
x表示行,y表示列,m表示跨行个数,n表示跨列个数,string表示要写入的单元格内容,style表示单元格样式。
1 #coding=utf8 2 ''' 3 设置单元格样式 4 ''' 5 import xlwt, xlrd 6 7 def set_style(name,height,bold=False): 8 style = xlwt.XFStyle() # 初始化样式 9 10 font = xlwt.Font() # 为样式创建字体 11 font.name = name # 'Times New Roman' 12 font.bold = bold 13 font.color_index = 4 14 font.height = height 15 16 # borders= xlwt.Borders() 17 # borders.left= 6 18 # borders.right= 6 19 # borders.top= 6 20 # borders.bottom= 6 21 22 style.font = font 23 # style.borders = borders 24 25 return style 26 27 28 #写excel 29 def write_excel(): 30 f = xlwt.Workbook() #创建工作簿 31 32 ''' 33 创建第一个sheet: 34 sheet1 35 ''' 36 sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建sheet 37 row0 = [u'业务',u'状态',u'北京',u'上海',u'广州',u'深圳',u'状态小计',u'合计'] 38 column0 = [u'机票',u'船票',u'火车票',u'汽车票',u'其它'] 39 status = [u'预订',u'出票',u'退票',u'业务小计'] 40 41 #生成第一行 42 for i in range(0,len(row0)): 43 sheet1.write(0,i,row0[i],set_style('Times New Roman',220,True)) 44 45 #生成第一列和最后一列(合并4行) 46 i, j = 1, 0 47 while i < 4*len(column0) and j < len(column0): 48 sheet1.write_merge(i,i+3,0,0,column0[j],set_style('Arial',220,True)) #第一列 49 sheet1.write_merge(i,i+3,7,7) #最后一列"合计" 50 i += 4 51 j += 1 52 53 sheet1.write_merge(21,21,0,1,u'合计',set_style('Times New Roman',220,True)) 54 55 #生成第二列 56 i = 0 57 while i < 4*len(column0): 58 for j in range(0,len(status)): 59 sheet1.write(j+i+1,1,status[j]) 60 i += 4 61 62 f.save('demo1.xls') #保存文件.这里如果是.xlsx的话会打不开。 63 64 if __name__ == '__main__': 65 #generate_workbook() 66 #read_excel() 67 write_excel()
注意:最终生成的文件如果是demo1.xlsx的话打不开,.xls就没问题。
如果对一个单元格重复操作,会引发error。所以在打开时加cell_overwrite_ok=True解决
table = file.add_sheet('sheet name',cell_overwrite_ok=True)
生成的demo1.xls效果如下。