有时候会需要对数据做excel形式的导出,下面做个总结
1.新建一个表,向表里添加一个sheet,并且设置单元格样式,设置字体样式(字体,字号),设置行高,设置列宽
# -*- coding: utf-8 -*-
import xlwt
workbook = xlwt.Workbook(encoding="utf-8")
sheet = workbook.add_sheet(u"sheet", cell_overwrite_ok=True)
sheet.col(0).width = 256 * 15 # 设置第一列的宽度为15,宽度的基本单位为256.所以设置的时候一般用256 × 需要的列宽。
# 设置行高为可以修改,并修改为 40,行高的基本单位为20,设置同行高。
sheet.row(0).height_mismatch = True
sheet.row(0).height = 20 * 40
2.设置单元格风格。Font()用来设置单元格字体内容,如字体类型、大小等;borders()设置单元格边框线粗细;partern()设置单元格背景颜色;XFStyle()设置风格类型;alignment()用来设置了字体水平居中、垂直居中、自动换行。
style = xlwt.XFStyle()
font = xlwt.Font()
font.name = "SimSun" # 宋体
font.height = 20 * 11 # 字体大小为11,字体大小的基本单位是20.
font.bold = False # 设置字体为不加粗
font.colour_index = 0x01 # 字体颜色默认为黑色,此处设置字体颜色为白色, 颜色范围为:0x00-0xff
style.font = font
pat = xlwt.Pattern()
pat.pattern = xlwt.Pattern.SOLID_PATTERN # 设置单元格背景颜色
pat.pattern_fore_colour = xlwt.Style.colour_map["dark_blue"] # 设置单元格背景颜色为深蓝
style.pattern = pat
borders = xlwt.Borders()
borders.left = 1
borders.right = 1
borders.top = 1
borders.bottom = 1
style.borders = borders
颜色映射如下
_colour_map_text = """
aqua 0x31
black 0x08
blue 0x0C
blue_gray 0x36
bright_green 0x0B
brown 0x3C
coral 0x1D
cyan_ega 0x0F
dark_blue 0x12
dark_blue_ega 0x12
dark_green 0x3A
dark_green_ega 0x11
dark_purple 0x1C
dark_red 0x10
dark_red_ega 0x10
dark_teal 0x38
dark_yellow 0x13
gold 0x33
gray_ega 0x17
gray25 0x16
gray40 0x37
gray50 0x17
gray80 0x3F
green 0x11
ice_blue 0x1F
indigo 0x3E
ivory 0x1A
lavender 0x2E
light_blue 0x30
light_green 0x2A
light_orange 0x34
light_turquoise 0x29
light_yellow 0x2B
lime 0x32
magenta_ega 0x0E
ocean_blue 0x1E
olive_ega 0x13
olive_green 0x3B
orange 0x35
pale_blue 0x2C
periwinkle 0x18
pink 0x0E
plum 0x3D
purple_ega 0x14
red 0x0A
rose 0x2D
sea_green 0x39
silver_ega 0x16
sky_blue 0x28
tan 0x2F
teal 0x15
teal_ega 0x15
turquoise 0x0F
violet 0x14
white 0x09
yellow 0x0D"""
继续设置单元格中内容中位置,居中,局左右等
使用xlwt中的Alignment来设置单元格的对齐方式,其中horz代表水平对齐方式,vert代表垂直对齐方式。
VERT_TOP = 0x00 上端对齐
VERT_CENTER = 0x01 居中对齐(垂直方向上)
VERT_BOTTOM = 0x02 低端对齐
HORZ_LEFT = 0x01 左端对齐
HORZ_CENTER = 0x02 居中对齐(水平方向上)
HORZ_RIGHT = 0x03 右端对齐
style.alignment.horz = 0x02
# 水平居中
style.alignment.vert = 0x01
# 垂直居中
对于会计数据,需要设置单元格的内容格式,比如人民币,美元之类的。
style.num_format_str = "_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)" # 设置单元格内容格式为 人民币,保留到小数点后两位
其他格式参考如下
fmts = [
"general",
"0",
"0.00",
"#,##0",
"#,##0.00",
""$"#,##0_);("$"#,##",
""$"#,##0_);[Red]("$"#,##",
""$"#,##0.00_);("$"#,##",
""$"#,##0.00_);[Red]("$"#,##",
"0%",
"0.00%",
"0.00E+00",
"# ?/?",
"# ??/??",
"M/D/YY",
"D-MMM-YY",
"D-MMM",
"MMM-YY",
"h:mm AM/PM",
"h:mm:ss AM/PM",
"h:mm",
"h:mm:ss",
"M/D/YY h:mm",
"_(#,##0_);(#,##0)",
"_(#,##0_);[Red](#,##0)",
"_(#,##0.00_);(#,##0.00)",
"_(#,##0.00_);[Red](#,##0.00)",
"_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)",
"_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)",
"_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)",
"_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)",
"mm:ss",
"[h]:mm:ss",
"mm:ss.0",
"##0.0E+0",
"@"
]
3.写入数据,并保存
sheet.write(0, 1, "content", style)
# 合并第0行的第0列到第3列。
worksheet.write_merge(0, 0, 0, 3, "First Merge")
workbook.save("test.xls")