zoukankan      html  css  js  c++  java
  • 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 黄色
  • 相关阅读:
    SQL Server DB 基于多核CPU的设置
    如何在64位的Windows 2008的系统配置导入Excel功能
    如果在IIS中没有将虚拟目录配置为应用程序,则可能导致此错误
    .NET 数据绑定中空格符的问题
    .net 读取客户端文件的方法
    spring4+quartz
    web端 图片上传
    Maven配置setting.xml详细说明
    Timer
    实现quartz定时器及quartz定时器原理介绍
  • 原文地址:https://www.cnblogs.com/SkyflyBird/p/11822007.html
Copyright © 2011-2022 走看看