Python使用xlwt模块保存并设计excel格式文件

本文需要以下的库文件,读者可以按照下方的方法进行安装:

"""
需安装的库文件:
pip install xlwt
pip install patterns

换源网址:
- 豆瓣:http://pypi.douban.com/simple/
- 中科大:https://pypi.mirrors.ustc.edu.cn/simple/
- 清华:https://pypi.tuna.tsinghua.edu.cn/simple

换源安装,例如:pip install xlwt -i https://pypi.tuna.tsinghua.edu.cn/simple
"""

首先使用xlwt简单写入一个excel文件:

import xlwt

#定义一个workbook(文件),编码为utf-8
workbook = xlwt.Workbook(encoding='utf-8')

#增加一个表单,cell_overwrite_ok=True表示可以覆盖原单元格中数据,默认为False,覆盖时会抛出异常
sheet = workbook.add_sheet("对应的子表格", cell_overwrite_ok=True)

# row代表行,col代表列
row = 0
col = 0
data = "写入的数据"
# 将数据写入对应的位置
sheet.write(row, col, data)

# 保存数据到对应的excel中
workbook.save("编写文件.xls")

效果如下:

使用xlwt将一行数据写入excel文件中:

import xlwt
import patterns as patterns

#定义一个workbook(文件),编码为utf-8
workbook = xlwt.Workbook(encoding='utf-8')

#增加一个表单,cell_overwrite_ok=True表示可以覆盖原单元格中数据,默认为False,覆盖时会抛出异常
sheet = workbook.add_sheet("对应的子表格", cell_overwrite_ok=True)

# row代表行,col代表列
row = 0
col = 0
data = ["班级", "姓名", "性别", "年龄"]

# num_row代表行数,num_col代表列数
num_row = 0
num_col = 0

# 将数据写入对应的位置
for i in data:
    sheet.write(row, num_col, i)
    num_col += 1

# 保存数据到对应的excel中
workbook.save("编写文件.xls")

效果如下:

使用xlwt将多行数据写入excel文件中:

#定义一个workbook(文件),编码为utf-8
workbook = xlwt.Workbook(encoding='utf-8')

#增加一个表单,cell_overwrite_ok=True表示可以覆盖原单元格中数据,默认为False,覆盖时会抛出异常
sheet = workbook.add_sheet("对应的子表格", cell_overwrite_ok=True)

# row代表行,col代表列
row = 0
col = 0
data_list = [["班级", "姓名", "性别", "年龄"], ["一年级", "张三", "男", "7"], ["二年级", "李四", "男", "9"], ["五年级", "王五", "女", "12"]]

# num_row代表行数,num_col代表列数
num_row = 0
num_col = 0

# 将数据写入对应的位置
for data in data_list:
    for i in data:
        sheet.write(num_row, num_col, i)
        num_col += 1
    num_row += 1
    num_col = 0

# 保存数据到对应的excel中
workbook.save("编写文件.xls")

效果如下:

讲完xlwt写入数据的方法,下面讲述设计excel表格格式的方法:

1.字体设计:

#格式信息,初始化样式
style = xlwt.XFStyle()
#字体基本设置
font = xlwt.Font()
# 设置字体
font.name = u'宋体'
#设置字体大小,11为字号,20为衡量单位
font.height = 11*20
#设置字体颜色,0:黑,1:白,2:红,3:亮绿,4:蓝,5:黄
#更多的颜色对应查看下面的单元格背景,颜色都是一一对应的,这里就不全部列举了
font.colour_index = 1
#加粗
font.bold = True
#斜体
font.underline = True
#下划线
font.underline = True

举个例子:

import xlwt
import patterns as patterns

#定义一个workbook(文件),编码为utf-8
workbook = xlwt.Workbook(encoding='utf-8')

#增加一个表单,cell_overwrite_ok=True表示可以覆盖原单元格中数据,默认为False,覆盖时会抛出异常
sheet = workbook.add_sheet("对应的子表格", cell_overwrite_ok=True)

#格式信息,初始化样式
style = xlwt.XFStyle()
#字体基本设置
font = xlwt.Font()
# 设置字体
font.name = u'宋体'
#设置字体大小,11为字号,20为衡量单位
font.height = 11*20
#设置字体颜色,0:黑,1:白,2:红,3:亮绿,4:蓝,5:黄
#更多的颜色对应查看下面的单元格背景,颜色都是一一对应的,这里就不全部列举了
font.colour_index = 0
#加粗
font.bold = True
#斜体
font.underline = True
#下划线
font.underline = True

# row代表行,col代表列
row = 0
col = 0
data_list = [["班级", "姓名", "性别", "年龄"], ["一年级", "张三", "男", "7"], ["二年级", "李四", "男", "9"], ["五年级", "王五", "女", "12"]]

# num_row代表行数,num_col代表列数
num_row = 0
num_col = 0

# 将需求加入样式
style.font = font

# 将数据写入对应的位置
for data in data_list:
    for i in data:
        sheet.write(num_row, num_col, i, style)
        num_col += 1
    num_row += 1
    num_col = 0

# 保存数据到对应的excel中
workbook.save("编写文件.xls")

效果图如下:

2.单元格设计

(1)单元格背景颜色

# 创建一个模式
pattern = xlwt.Pattern()
#设置其模式为实型
pattern.pattern = xlwt.Pattern.SOLID_PATTERN  
# 背景颜色
pattern.pattern_fore_colour = 1

举个例子:

import xlwt
import patterns as patterns

#定义一个workbook(文件),编码为utf-8
workbook = xlwt.Workbook(encoding='utf-8')

#增加一个表单,cell_overwrite_ok=True表示可以覆盖原单元格中数据,默认为False,覆盖时会抛出异常
sheet = workbook.add_sheet("对应的子表格", cell_overwrite_ok=True)

#格式信息,初始化样式
style = xlwt.XFStyle()
# 创建一个模式
pattern = xlwt.Pattern()
#设置其模式为实型
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
# 背景颜色
pattern.pattern_fore_colour = 3

# row代表行,col代表列
row = 0
col = 0
data_list = [["班级", "姓名", "性别", "年龄"], ["一年级", "张三", "男", "7"], ["二年级", "李四", "男", "9"], ["五年级", "王五", "女", "12"]]

# num_row代表行数,num_col代表列数
num_row = 0
num_col = 0

# 将需求加入样式
style.pattern = pattern

# 将数据写入对应的位置
for data in data_list:
    for i in data:
        sheet.write(num_row, num_col, i, style)
        num_col += 1
    num_row += 1
    num_col = 0

# 保存数据到对应的excel中
workbook.save("编写文件.xls")

效果图如下:

(2)单元格对齐方式

# 设置单元格对齐方式
alignment = xlwt.Alignment()
# 0x01(左端对齐)、0x02(水平方向上居中对齐)、0x03(右端对齐)
alignment.horz = 0x02
# 0x00(上端对齐)、 0x01(垂直方向上居中对齐)、0x02(底端对齐)
alignment.vert = 0x01

#可设置自动换行
alignment.wrap = 1

举个例子:

import xlwt
import patterns as patterns

#定义一个workbook(文件),编码为utf-8
workbook = xlwt.Workbook(encoding='utf-8')

#增加一个表单,cell_overwrite_ok=True表示可以覆盖原单元格中数据,默认为False,覆盖时会抛出异常
sheet = workbook.add_sheet("对应的子表格", cell_overwrite_ok=True)

#格式信息,初始化样式
style = xlwt.XFStyle()
# 设置单元格对齐方式
alignment = xlwt.Alignment()
# 0x01(左端对齐)、0x02(水平方向上居中对齐)、0x03(右端对齐)
alignment.horz = 0x02
# 0x00(上端对齐)、 0x01(垂直方向上居中对齐)、0x02(底端对齐)
alignment.vert = 0x01

#可设置自动换行
alignment.wrap = 1

# row代表行,col代表列
row = 0
col = 0
data_list = [["班级", "姓名", "性别", "年龄"], ["一年级", "张三", "男", "7"], ["二年级", "李四", "男", "9"], ["五年级", "王五", "女", "12"]]

# num_row代表行数,num_col代表列数
num_row = 0
num_col = 0

# 将需求加入样式
style.alignment = alignment

# 将数据写入对应的位置
for data in data_list:
    for i in data:
        sheet.write(num_row, num_col, i, style)
        num_col += 1
    num_row += 1
    num_col = 0

# 保存数据到对应的excel中
workbook.save("编写文件.xls")

效果图如下:

(3) 单元格边框设置

#设置边框
borders = xlwt.Borders()

borders.left = 1
borders.right = 1
borders.top = 1
borders.bottom = 1
#细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,
#双线:6,细点虚线:7,大粗虚线:8,细点划线:9,
#粗点划线:10,细双点划线:11,粗双点划线:12,斜点划线:13

# 边框颜色设置:
borders.left_colour = 1
borders.right_colour = 1
borders.top_colour = 1
borders.bottom_colour = 1

举个例子:

import xlwt
import patterns as patterns

#定义一个workbook(文件),编码为utf-8
workbook = xlwt.Workbook(encoding='utf-8')

#增加一个表单,cell_overwrite_ok=True表示可以覆盖原单元格中数据,默认为False,覆盖时会抛出异常
sheet = workbook.add_sheet("对应的子表格", cell_overwrite_ok=True)

#格式信息,初始化样式
style = xlwt.XFStyle()
#设置边框
borders = xlwt.Borders()

borders.left = 2
borders.right = 2
borders.top = 2
borders.bottom = 2
#细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,
#双线:6,细点虚线:7,大粗虚线:8,细点划线:9,
#粗点划线:10,细双点划线:11,粗双点划线:12,斜点划线:13

# 边框颜色设置:
borders.left_colour = 0
borders.right_colour = 0
borders.top_colour = 0
borders.bottom_colour = 0

# row代表行,col代表列
row = 0
col = 0
data_list = [["班级", "姓名", "性别", "年龄"], ["一年级", "张三", "男", "7"], ["二年级", "李四", "男", "9"], ["五年级", "王五", "女", "12"]]

# num_row代表行数,num_col代表列数
num_row = 0
num_col = 0

# 将需求加入样式
style.borders = borders

# 将数据写入对应的位置
for data in data_list:
    for i in data:
        sheet.write(num_row, num_col, i, style)
        num_col += 1
    num_row += 1
    num_col = 0

# 保存数据到对应的excel中
workbook.save("编写文件.xls")

效果图如下:

(4)单元格行高和列宽

#1.设置列宽
#直接调用基础设置已经定义的sheet
sheet.col(1).width = 15 * 256
#15表示15个字符宽度,256是衡量单位

#2.设置行高
tall_style = xlwt.easyxf('font:height 720;')  # 36pt,类型小初的字号
first_row = sheet.row(0)
first_row.set_style(tall_style)

举个例子:

import xlwt
import patterns as patterns

#定义一个workbook(文件),编码为utf-8
workbook = xlwt.Workbook(encoding='utf-8')

#增加一个表单,cell_overwrite_ok=True表示可以覆盖原单元格中数据,默认为False,覆盖时会抛出异常
sheet = workbook.add_sheet("对应的子表格", cell_overwrite_ok=True)

#格式信息,初始化样式
style = xlwt.XFStyle()

# row代表行,col代表列
row = 0
col = 0
data_list = [["班级", "姓名", "性别", "年龄"], ["一年级", "张三", "男", "7"], ["二年级", "李四", "男", "9"], ["五年级", "王五", "女", "12"]]

# num_row代表行数,num_col代表列数
num_row = 0
num_col = 0


# 将数据写入对应的位置
for data in data_list:
    for i in data:
        # 1.设置列宽
        # 直接调用基础设置已经定义的sheet
        sheet.col(num_col).width = 15 * 256
        # 15表示15个字符宽度,256是衡量单位

        # 2.设置行高
        tall_style = xlwt.easyxf('font:height 720;')  # 36pt,类型小初的字号
        first_row = sheet.row(num_row)
        first_row.set_style(tall_style)
        sheet.write(num_row, num_col, i)
        num_col += 1
    num_row += 1
    num_col = 0

# 保存数据到对应的excel中
workbook.save("编写文件.xls")

效果图如下:

(5)合并单元格

#合并单元格,注意!!!起始行列计数均为0
sheet.write_merge(first_row, last_row, first_col, last_col, u'合并')

举个例子:

import xlwt
import patterns as patterns

#定义一个workbook(文件),编码为utf-8
workbook = xlwt.Workbook(encoding='utf-8')

#增加一个表单,cell_overwrite_ok=True表示可以覆盖原单元格中数据,默认为False,覆盖时会抛出异常
sheet = workbook.add_sheet("对应的子表格", cell_overwrite_ok=True)

#格式信息,初始化样式
style = xlwt.XFStyle()

# row代表行,col代表列
row = 0
col = 0
data_list = [["班级", "姓名", "性别", "年龄"], ["一年级", "张三", "男", "7"], ["二年级", "李四", "男", "9"], ["五年级", "王五", "女", "12"]]

# num_row代表行数,num_col代表列数
num_row = 0
num_col = 0


# 将数据写入对应的位置
for data in data_list:
    for i in data:
        sheet.write(num_row, num_col, i)
        num_col += 1
    num_row += 1
    num_col = 0

#合并第二行到第四行的第二列到第四列
sheet.write_merge(1, 3, 1, 3, u'合并')

# 保存数据到对应的excel中
workbook.save("编写文件.xls")

效果图如下:

完整代码如下:

import xlwt
import patterns as patterns

#定义一个workbook(文件),编码为utf-8
workbook = xlwt.Workbook(encoding='utf-8')

#增加一个表单,cell_overwrite_ok=True表示可以覆盖原单元格中数据,默认为False,覆盖时会抛出异常
sheet = workbook.add_sheet("对应的子表格", cell_overwrite_ok=True)

#格式信息,初始化样式
style = xlwt.XFStyle()

"""
字体设计
"""
#字体基本设置
font = xlwt.Font()
# 设置字体
font.name = u'宋体'
#设置字体大小,11为字号,20为衡量单位
font.height = 11*20
#设置字体颜色,0:黑,1:白,2:红,3:亮绿,4:蓝,5:黄
#更多的颜色对应查看下面的单元格背景,颜色都是一一对应的,这里就不全部列举了
font.colour_index = 0
#加粗
font.bold = True
#斜体
font.underline = True
#下划线
font.underline = True

"""
单元格背景颜色
"""
# 创建一个模式
pattern = xlwt.Pattern()
#设置其模式为实型
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
# 背景颜色
pattern.pattern_fore_colour = 1

"""
单元格对齐方式
"""
# 设置单元格对齐方式
alignment = xlwt.Alignment()
# 0x01(左端对齐)、0x02(水平方向上居中对齐)、0x03(右端对齐)
alignment.horz = 0x02
# 0x00(上端对齐)、 0x01(垂直方向上居中对齐)、0x02(底端对齐)
alignment.vert = 0x01

#可设置自动换行
alignment.wrap = 1

"""
单元格边框设置
"""
#设置边框
borders = xlwt.Borders()

borders.left = 1
borders.right = 1
borders.top = 1
borders.bottom = 1
#细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,
#双线:6,细点虚线:7,大粗虚线:8,细点划线:9,
#粗点划线:10,细双点划线:11,粗双点划线:12,斜点划线:13

# 边框颜色设置:
borders.left_colour = 0
borders.right_colour = 0
borders.top_colour = 0
borders.bottom_colour = 0


# row代表行,col代表列
row = 0
col = 0
data_list = [["班级", "姓名", "性别", "年龄"], ["一年级", "张三", "男", "7"], ["二年级", "李四", "男", "9"], ["五年级", "王五", "女", "12"]]

# num_row代表行数,num_col代表列数
num_row = 0
num_col = 0

# 将需求加入样式
style.font = font
style.pattern = pattern
style.alignment = alignment
style.borders = borders

# 将数据写入对应的位置
for data in data_list:
    for i in data:
        """
        单元格行高和列宽
        """
        # 1.设置列宽
        # 直接调用基础设置已经定义的sheet
        sheet.col(num_col).width = 15 * 256
        # 15表示15个字符宽度,256是衡量单位

        # 2.设置行高
        tall_style = xlwt.easyxf('font:height 720;')  # 36pt,类型小初的字号
        first_row = sheet.row(num_row)
        first_row.set_style(tall_style)

        sheet.write(num_row, num_col, i, style)
        num_col += 1
    num_row += 1
    num_col = 0

#合并第二行到第四行的第二列到第四列 (为完整展示,暂不合并)
# sheet.write_merge(1, 3, 1, 3, u'合并')

# 保存数据到对应的excel中
workbook.save("编写文件.xls")

效果图如下:

下面是颜色图,上述代码涉及颜色的代码均在图上:


在此感谢博主@想学机器学习的rookie的博文:Python xlwt模块设置Excel样式
该博主的文章写得很详细,我这边做些补充,读者可以去看看博主@想学机器学习的rookie的文章,本次的博文写到这里了,欢迎大家的点赞,评论和收藏一波,代码中有错误或纰漏处也欢迎各位指出,我会在第一时间进行修改的。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2022年5月16日
下一篇 2022年5月16日

相关推荐