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 | 黄色 |