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 黄色
  • 相关阅读:
    golang删除数组某个元素
    golang用通道实现信号量,控制并发个数
    什么是ScaleIO中的forwards rebuild和backwards rebuild?
    SQL Server中的database checkpoint
    如何将thick provision lazy zeroed的VMDK文件转换为thick provision eager zeroed?
    LoadTestAgentResultsLateException in VS2010
    SQL Server Instance无法启动了, 因为TempDB所在的分区没有了, 怎么办?
    VMware vCenter中, 如何辩认虚机上Raw Device Mapping过了的一块物理磁盘?
    SQL Server AlwaysOn Setup Step-By-Step Guide
    TPC-E在populate测试Database时需要注意的一些事项
  • 原文地址:https://www.cnblogs.com/SkyflyBird/p/11822007.html
Copyright © 2011-2022 走看看