python xlwt 写入Excel

简介:

将数据写入Microsoft Excel中,可使用xlwt,其官网:https://pypi.org/project/xlwt/

安装命令:

pip/pip3 install xlwt

简单的应用如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import xlwt

# 添加设置默认编码,避免:UnicodeEncodeError: 'ascii' codec can't encode characters ...
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

# 样式相关
def CreateStyle(rowx, colx, value):
   # 初始化样式
   style = xlwt.XFStyle()

   font = xlwt.Font()            # 设置字体    
   alignment = xlwt.Alignment()  # 设置排列格式
   borders = xlwt.Borders()      # 设置边框
   pattern = xlwt.Pattern()      # 设置背景颜色

   if rowx == 0:
      font.name = u'华文彩云'
   elif rowx == 1:
      if colx%2 == 0:
         font.bold = True 
      else:
         font.italic = True
   elif rowx == 2:
      pattern.pattern_fore_colour = colx 
      pattern.pattern = xlwt.Pattern.SOLID_PATTERN
   elif rowx == 3:
      alignment.horz = xlwt.Alignment.HORZ_CENTER  # 水平居中
      alignment.vert = xlwt.Alignment.VERT_CENTER  # 垂直居中
   elif rowx == 4:
      borders.left = colx 
      
      borders.top = colx 
      borders.bottom = colx 
      if colx%2 == 0:
         borders.right = xlwt.Borders.THICK
      else:
         borders.right = xlwt.Borders.THIN

   # 定义格式
   style.font = font 
   style.borders = borders 
   style.alignment = alignment
   style.pattern = pattern
   
   return style 

def CreateNewExcel():
   # 创建新的excel
   newbook = xlwt.Workbook(encoding='utf-8')
   # 创建新的Sheet
   newSheet = newbook.add_sheet('NewSheet')
   # 写入内容
   for rowx in range(0,10):
      for colx in range(0,10):
         r = rowx                         # 行位置
         c = colx                         # 列位置
         label = str(colx)                # 内容
         style = CreateStyle(r, c, label) # 样式
         newSheet.write(r, c, label, style)

   #保存excel,保存格式以.xls为准,若保存.xlsx的话,打开文件会报错
   newbook.save('NewExcel.xls')

if __name__ == '__main__':
   CreateNewExcel()

加粗部分为主体代码,其效果如下:

对于写入单元格的样式主要有如下几种:

样式 介绍
font 对字体进行操作,比如字体的类型,颜色,大小,是否为加粗等      
alignment      对齐方式,比如水平居中,垂直居中等
borders 边框,是否添加实线或虚线等
pattern 背景颜色相关
protection 保护模式相关???

可参考:xlwt/Formatting.py

 

接下来我们一一说明下,为了节省篇幅仅粘贴主体代码:

font

# 样式相关
def CreateFontStyle(rowx, colx, value):
   # 初始化样式
   style = xlwt.XFStyle()
   # 设置字体
   font = xlwt.Font()                
   font.name = 'Airal'        # 字体类型,类型参考Excel字体,若为汉字,注意添加u格式
   font.bold = True           # 是否加粗
   font.italic = True         # 是否为斜体
   font.struck_out = True     # 是否添加删除线
   font.height = 0x00C8       # 文字高度
   font.outline = False       #
   font.shadow = False        #
   font.colour_index = 0x7FF  # 文字颜色,可参考下方颜色编码
   font._weight = 0x0190      #

   # 下划线相关,主要为:无,单下划线,双下划线
   # 类型: UNDERLINE_NONE UNDERLINE_SINGLE UNDERLINE_SINGLE_ACC UNDERLINE_DOUBLE UNDERLINE_DOUBLE_ACC
   font.underline = xlwt.Font.UNDERLINE_SINGLE

   # 类型有:ESCAPEMENT_NONE, ESCAPEMENT_SUPERSCRIPT, ESCAPEMENT_SUBSCRIPT
   font.escapement = xlwt.Font.ESCAPEMENT_NONE

   # 类型有:FAMILY_NONE, FAMILY_ROMAN, FAMILY_SWISS, FAMILY_MODERN, FAMILY_SCRIPT, FAMILY_DECORATIVE
   font.family = xlwt.Font.FAMILY_NONE

   # 类型有:CHARSET_ANSI_LATIN, CHARSET_SYS_DEFAULT, CHARSET_SYMBOL, CHARSET_APPLE_ROMAN, CHARSET_ANSI_JAP_SHIFT_JIS, 
   # CHARSET_ANSI_KOR_HANGUL, CHARSET_ANSI_KOR_JOHAB, CHARSET_ANSI_CHINESE_GBK, CHARSET_ANSI_CHINESE_BIG5, 
   # CHARSET_ANSI_GREEK, CHARSET_ANSI_TURKISH, CHARSET_ANSI_VIETNAMESE, CHARSET_ANSI_HEBREW, CHARSET_ANSI_ARABIC, 
   # CHARSET_ANSI_BALTIC, CHARSET_ANSI_CYRILLIC, CHARSET_ANSI_THAI, CHARSET_ANSI_LATIN_II, CHARSET_OEM_LATIN_I
   font.charset = xlwt.Font.CHARSET_SYS_DEFAULT

   # 定义格式
   style.font = font 
   
   return style 

 alignment

def CreateAlignmentStyle(rowx, colx, value):
   # 初始化样式
   style = xlwt.XFStyle()
   # 设置排列样式
   alignment = xlwt.Alignment()

   alignment.inde = 0         #
   alignment.merg = 0         # 

   # 水平相关
   # 类型: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED,
   # HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED
   alignment.horz = xlwt.Alignment.HORZ_CENTER

   # 垂直相关
   # 类型:VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED
   alignment.vert = xlwt.Alignment.VERT_CENTER

   # 类型: DIRECTION_GENERAL, DIRECTION_LR, DIRECTION_RL
   alignment.dire = xlwt.Alignment.DIRECTION_GENERAL

   # 类型: ORIENTATION_NOT_ROTATED, ORIENTATION_STACKED, ORIENTATION_90_CC, ORIENTATION_90_CW
   alignment.orie = xlwt.Alignment.ORIENTATION_NOT_ROTATED

   # 类型: ROTATION_0_ANGLE, ROTATION_STACKED 
   alignment.rota = xlwt.Alignment.ROTATION_0_ANGLE

   # 类型: WRAP_AT_RIGHT, NOT_WRAP_AT_RIGHT
   alignment.wrap = xlwt.Alignment.NOT_WRAP_AT_RIGHT

   # 类型: SHRINK_TO_FIT, NOT_SHRINK_TO_FIT
   alignment.shri = xlwt.Alignment.NOT_SHRINK_TO_FIT

   style.alignment = alignment

   return style 

 

 borders

def CreateBorderStype(rowx, colx, value):
   # 初始化样式
   style = xlwt.XFStyle()
   # 设置边框
   borders = xlwt.Borders()

   # 样式相关
   # 类型: NO_LINE, THIN, MEDIUM, DASHED, DOTTED, THICK, DOUBLE, HAIR
   borders.left = xlwt.Borders.NO_LINE       # 
   borders.right = xlwt.Borders.THIN         # 
   borders.top = xlwt.Borders.MEDIUM         # 
   borders.bottom = xlwt.Borders.DASHED      # 
   borders.diag = xlwt.Borders.THICK         # 

   # 颜色相关,可参考末尾的颜色相关
   borders.left_colour = 0x40
   borders.right_colour = 0x40
   borders.top_colour = 0x40
   borders.bottom_colour = 0x40
   borders.diag_colour = 0x40

   # 类型: NEED_DIAG1, NEED_DIAG2, NO_NEED_DIAG1, NO_NEED_DIAG2
   borders.need_diag1 = xlwt.Borders.NO_NEED_DIAG1       #
   borders.need_diag2 = xlwt.Borders.NO_NEED_DIAG2       # 

   style.borders = borders 
   return style 

 pattern

def CreatePatternStype(rowx, colx, value):
   # 初始化样式
   style = xlwt.XFStyle()
   # 设置边框
   pattern = xlwt.Pattern()

   # 模式相关,类型: NO_PATTERN, SOLID_PATTERN
   pattern.pattern = xlwt.Pattern.SOLID_PATTERN
   pattern.pattern_fore_colour = 1              # 
   pattern.pattern_back_colour = 2              # 

   style.pattern = pattern
   return style 

 protection

def CreatePatternStype(rowx, colx, value):
   # 初始化样式
   style = xlwt.XFStyle()
   # 设置边框
   protection = xlwt.Protection()

   protection.cell_locked = 1
   protection.formula_hidden = 0

   style.protection = protection
   return style

 

以上,关于颜色的设定,可参考:xlwt/Style.py 下的第307~372行,可使用数据或索引进行颜色设定:

名称 数据 索引 注释 名称 数据 索引 注释
black  0x08   8 黑色 light_blue 0x30   48 亮蓝色
blue 0x0C 12 蓝色 light_green 0x2A 42 亮绿色
blue_gray 0x36 54 蓝绿色 light_orange 0x34 52 亮橙色
bright_green 0x0B 11 鲜绿色 light_turquoise   0x29 41 亮青绿色
brown 0x3C 60 棕色 light_yellow 0x2B 43 亮黄色
coral 0x1D 29 珊瑚色 lime 0x32 50 石灰色
dark_blue 0x12 18 深蓝色 ocean_blue 0x1E 30 海洋蓝
dark_blue_ega   0x12 18 深蓝色 olive_ega 0x13 19 黄棕色
dark_green 0x3A 58 深绿色 olive_green 0x3B 59 黄棕绿
dark_purple 0x1C 28 深紫色 orange 0x35 53 橙色
dark_red 0x10 16 深红色 pale_blue 0x2C 44 淡蓝色
dark_red_ega 0x10 16 深红色 periwinkle 0x18 24 浅紫光蓝色
dark_yellow 0x31 49 深黄色 pink 0x0E 14 粉红色
gold 0x33 51 金色 plum 0x3D 61 紫红色
gray_ega 0x17 23 灰色 red 0x0A 10 红色
gray25 0x16 22 灰色25 rose 0x2D 45 玫瑰色
gray40 0x37 55 灰色40 sea_green 0x39 57 海洋绿
gray50 0x17 23 灰色50 sky_blue 0x28 40 天空蓝
gray80 0x3F 63 灰色80 tan 0x2F 47 棕褐色
green 0x11 17 绿色 teal 0x15 21 青色
ice_blue 0x1F 31 冰蓝色 turquoise 0x0F 15 青绿色
indigo 0x3E 62 靛蓝色 violet 0x14 20 紫罗兰色
ivory 0x1A 26 乳白色 white 0x09 9 白色
lavender 0x2E 46 淡紫色 yellow 0x0D 13 黄色

 

posted @ 2019-11-11 21:02  Code~  阅读(806)  评论(0编辑  收藏  举报