跳到主要内容

Python 操作 Excle 数据表:数据写入

上节课我们学习了使用 Python 的 xlrd 模块对 Excel 表格进行数据读取,但是我们在平时的工作过程中,除了对数据进行读取操作外,还以后另外一项非常重要的内容就是数据的写入

向 Excel 中写入数据的应用场景也是非常广泛。如数据清洗后数据的存储写入或多个 Excel 数据合并新文件生成等等。既然有专门读取数据的 xlrd 模块,自然也有专门进行数据写入的 xlwt 模块。

本小节我们就来学习下 Python 第三方库 xlwt 完成对 Excel 的写入。

1. xlwt 模块介绍

xlwt 是一个向 Excel 文件(.xls)写入信息库。支持 excel03 版到 excel2013 版,保存的格式只支持 xls 格式,07 以后的版本 xlsx 不支持。

通过本小节的学习,我们最终要完成工作簿 “2019-CNY.xls” 的创建,其中包含两个工作表,分别为 “CNY” 与 “image”,两个工作表中具体内容如下图所示。

图片描述

图片描述

1.1 安装

xlwt 是 Python 的第三方库,使用前需要通过以下命令进行安装:

pip install xlwt

1.2 使用步骤

步骤 1:导入 xlwt 模块

通过 import xlwt 完成导入。

import xlwt

步骤 2:创建工作簿

import xlwt
wb = xlwt.Workbook()

步骤 3:创建工作表

import xlwt
wb = xlwt.Workbook() # 创建一个工作簿对象
ws = wb.add_sheet("sheet1") # 使用工作簿对象创建一个工作表,名称为 sheet1

步骤 4:向工作表中写入数据

根据 xlwt 提供的方法,完成工作表(sheet)中数据的写入,以及包括样式的设置等操作。

步骤 5:生成 Excel 文件

import xlwt
wb = xlwt.Workbook()
...省略部分代码
wb.save("data.xls") # 保存并生成 Excel 文件

通过 save () 方法进行保存,生成 Excel 文件,save () 方法也可以传入你想要保存到的文件路径。到这里就完成了新的工作簿创建和数据写入的操作。

2. xlwt 写入 Excel

接下来,针对 xlwt 提供的常用写入方法进行讲解,这里根据写入内容的类型进行划分。

2.1 写入文本

写入文本常用方法,见下表。

属性描述
write(r, c, label, style)将指定单元格写入工作表
write_merge(r1, r2, c1, c2, label, style)将指定合并单元格写入工作表

具体方法使用,如下所示:

ws = wb.add_sheet("sheet1")
ws.write(3,0"张三")

如何确定要填入的单元格位置呢?

工作表中的行和列索引均为从 0 开始,即行索引为 1,表示第 2 行,列索引为 2,表示第三列。起始位置从工作表中左上角位置。

通过上述代码,可以得知在创建的 sheet 1 下,第 4 行第 1 列的位置写入了 "张三"。

ws = wb.add_sheet("sheet1")
ws.write_merge(0, 1, 0, 5, "班级学员名单", titlestyle)

通过上述代码,可以得知在创建的 sheet1 下,第 1 行,第 1-5 列做了单元格合并,里面填写标题内容,且应用 titlestyle 样式(关于样式如何定义在下面小节中详细说明)。

2.2 写入图片

写入图片常用方法,见下表。

方法参数描述
insert_bitmap(filename, row, col, x = 0, y = 0, scale_x = 1, scale_y = 1)其中 filename 为文件名,row 为行索引,col 为列索引,x 为水平方向偏移位置,y 为垂直方向偏移位置,scale_x 与 scale_y 为缩放比例,默认 1,即按 1:1 行展示在指定位置插入图片

对应代码中访问,如下所示:

ws = wb.add_sheet("sheet1")
ws.insert_bitmap("user1.bmp", 0, 0)

通过上述代码,可以得知在创建的 sheet1 下,第 1 行第 1 列的位置插入了 user1.bmp 图片。

3. xlwt 格式设置

xlwt 除数据写入外,还可以单元格格式设置和单元格样式设置,一共分为 6 组,包括数字格式、字体、对齐方式、边框、填充、保护。使用步骤如下:

步骤 1:初始化样式

import xlwt
titlestyle = xlwt.XFStyle() # 初始化 XFStyle 对象

步骤 2:配置样式

根据提供的属性进行单元格样式设置,如字体、边框、对齐方式设置等。

步骤 3:应用样式

import xlwt
titlestyle = xlwt.XFStyle() # 初始化XFStyle对象
...省略部分代码
ws = wb.add_sheet("sheet1")
ws.write_merge(0, 1, 0, 5, "班级学员名单", titlestyle) #应用样式

创建和配置好的 XFStyle 对象需要与写入方法结合使用,如上述代码中,将创建好的 titlestyle 应用到了标题上。

xlwt 中常用格式属性分组,见下表。

分组描述
Font关于字体相关设置,如字号、字体、加粗等
Alignment水平和垂直对齐,文本换行,缩进,方向 / 旋转,文本方向
Borders边框线条样式和颜色
Pattern背景区域样式和颜色

下面我们针对每一项的使用进行单独介绍。

3.1 Font 字体

Font 字体中常用属性,见下表。

属性描述
name字体名称
bold字体是否 jiac
height字号
colour_index字体颜色

对应代码中访问,如下所示:

titlestyle = xlwt.XFStyle()  # 初始化样式
titlefont = xlwt.Font()
titlefont.name = "宋体"
titlefont.bold = True # 加粗
titlefont.height = 11\*20 # 字号
titlefont.colour_index = 0x08 # 字体颜色
titlestyle.font = titlefont

使用时,首先通过 xlwt.Font 进行初始化,完成字体配置后,将对象赋值给 XFStyle。

Tips:上述代码中颜色代码不是 RGB 的六位颜色代码,而是 xlwt 内部的一套代码。具体可以参考 xlwt.Styles 中 _colour_map_text 的数据。

xlwt.Styles 中 _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

3.2 Alignment 对齐方式

对齐方式常用属性,见下表。

属性描述
horz水平方向对齐
vert垂直方向对齐

对应代码中访问,如下所示:

cellalign = xlwt.Alignment()
cellalign.horz = 0x02
cellalign.vert = 0x01
titlestyle.alignment = cellalign

使用时,首先通过 xlwt.Alignment 进行初始化,完成配置后,将对象赋值给 XFStyle。

水平方向对齐取值范围:

  • 0x01 (左端对齐);
  • 0x02 (水平方向上居中对齐);
  • 0x03 (右端对齐);

垂直方向对齐取值范围:

  • 0x00 (上端对齐);
  • 0x01 (垂直方向上居中对齐);
  • 0x02 (底端对齐)。

3.3 Borders 边框

边框样式常用属性,见下表。

属性描述
top上边框
right右边框
bottom下边框
let左边框

对应代码中访问,如下所示:

borders = xlwt.Borders()
borders.right = xlwt.Borders.DASHED #虚线
borders.bottom = xlwt.Borders.DOTTED #点线
titlestyle.borders = borders

使用时,首先通过 xlwt.Borders 进行初始化,完成边框样式配置后,将对象赋值给 XFStyle。上述代码即设置单元格右侧边框为虚线,设置单元格下边框为点线。

3.4 Pattern 填充

填充常用属性,见下表。

属性描述
pattern设置背景颜色的模式
pattern_fore_colour背景颜色

对应代码中访问,如下所示:

datestyle = xlwt.XFStyle()
bgcolor = xlwt.Pattern()
bgcolor.pattern=xlwt.Pattern.SOLID_PATTERN
bgcolor.pattern_fore_colour=22 #背景颜色
datestyle.pattern=bgcolor

上述代码中,首先通过 xlwt.Pattern 进行初始化,为单元格设置填充背景颜色样式,其中 xlwt.Pattern 为填充背景颜色的模式,SOLID_PATTERN 表示完全填充。完成配置后,将对象赋值给 XFStyle。

4. 小结

本节课程我们主要学习了 xlwt 模块的使用。本节课程的重点如下:

  • 了解 xlwt 模块作用及使用步骤;
  • 掌握 xlwt 模块中写入文本、图片的使用方法;
  • 掌握 xlwt 模块中格式化单元格样式常用属性与方法。

图片描述