【全民Python】Python数据处理之Excel数据xlrd xlwt xlutils模块运用

时间:2021-05-23 01:05:31


目录

一.前言

二.xlrd xlwt xlutils库的安装

三.Excel的读写改

1.创建Excel表格xls

2.读取Excel表格

3.修改表格


一.前言

数据处理是 Python 的一大应用场景,而 Excel 又是当前最流行的数据处理软件。因此用 Python 进行数据处理时,很容易会和 Excel 打起交道。得益于前人的辛勤劳作,Python 处理 Excel 已有很多现成的*,比如 xlrd & xlwt & xlutils 、 XlsxWriter 、 OpenPyXL ,而在 Windows 平台上可以直接调用 Microsoft Excel 的开放接口,这些都是比较常用的工具,还有其他一些优秀的工具这里就不一一介绍,接下来我们通过一个表格展示各工具之间的特点:

类型

xlrd&xlwt&xlutils

XlsxWriter

OpenPyXL

Excel开放接口

读取

支持

不支持

支持

支持

写入

支持

支持

支持

支持

修改

支持

不支持

支持

支持

xls

支持

不支持

不支持

支持

xlsx

高版本支持

支持

支持

支持

大文件

不支持

支持

支持

不支持

效率




超慢

功能

较弱

强大

一般

超强大

以上可以根据需求不同,选择合适的工具,现在为大家主要介绍下最常用的 xlrd & xlwt & xlutils 系列工具的使用。

二.xlrd xlwt xlutils库的安装

  • xlrd:用于读取 Excel 文件;
  • xlwt:用于写入 Excel 文件;
  • xlutils:用于操作 Excel 文件的实用工具,比如复制、分割、筛选等;

安装比较简单,直接用 pip 工具安装三个库即可,安装命令如下:

$ pip3 install xlrd xlwt xlutils

【全民Python】Python数据处理之Excel数据xlrd xlwt xlutils模块运用

三.Excel的读写改

1.创建Excel表格xls

#region 创建Xls表格对象

import xlwt
wb= xlwt.Workbook() #创建xls文件对象

#新增两个表单页
sh1 = wb.add_sheet("成绩")
sh2 = wb.add_sheet("总结")

#然后根据位置添加数据,第一个参数是行,第二个参数是列
sh1.write(0,0,'姓名')
sh1.write(0,1,'成绩')
sh1.write(1,0,'张三')
sh1.write(1,1,90)
sh1.write(2,0,'李四')
sh1.write(2,1,96)
sh1.write(3,0,'幻世界')
sh1.write(3,1,100)

sh2.write(0,0,'总分')
sh2.write(0,1,195)

wb.save('./Config/成绩单.xls')
#endregion

【全民Python】Python数据处理之Excel数据xlrd xlwt xlutils模块运用

2.读取Excel表格

#region 读取Excel表格

import xlrd

wb= xlrd.open_workbook('./Config/成绩单.xls')
print('sheet数量:', wb.nsheets, wb.sheet_names()[0],wb.sheet_names()[1])

# 根据 sheet 索引获取内容
sh1 = wb.sheet_by_index(0)
print('%s 表:%d 行  %d 列'%  (sh1.name,sh1.nrows,sh1.ncols) )
# 或者
#也可根据 sheet 名称获取内容
sh1 = wb.sheet_by_name('成绩')
print('%s 表:%d 行  %d 列'%  (sh1.name,sh1.nrows,sh1.ncols) )

# 获取并打印某个单元格的值
print( "第一行第二列的值为:", sh1.cell_value(0, 1))
# 获取整行或整列的值
rows = sh1.row_values(0) # 获取第一行内容
cols = sh1.col_values(1) # 获取第二列内容
# 打印获取的行列值
print( "第一行的值为:", rows)
print( "第二列的值为:", cols)
# 获取单元格内容的数据类型
print( "第二行第一列的值类型为:", sh1.cell(1, 0).ctype)

# 遍历所有表单内容
for sh in wb.sheets():
    for r in range(sh.nrows):
        # 输出指定行
        print( sh.row(r))
#endregion

#region 修改Excel
sheet数量: 2 成绩 总结
成绩 表:4 行  2 列
成绩 表:4 行  2 列
第一行第二列的值为: 成绩
第一行的值为: ['姓名', '成绩']
第二列的值为: ['成绩', 90.0, 96.0, 100.0]
第二行第一列的值类型为: 1
[text:'姓名', text:'成绩']
[text:'张三', number:90.0]
[text:'李四', number:96.0]
[text:'幻世界', number:100.0]
[text:'总分', number:195.0]

 单元格子 返回的类型数值对应下面类型

数值

类型

说明

0

empty


1

string

字符串

2

number

数字

3

date

日期

4

boolean

布尔值

5

error

错误

3.修改表格

#region 修改Excel
import xlrd
from xlutils.copy import copy

#打开excel文件
wb= xlrd.open_workbook('Config\成绩单.xls')
nwb= copy(wb)

#选第一个表
sh1 =nwb.get_sheet(0)
#添加新数据
sh1.write(3,0,'shj')
sh1.write(3,1,92)

sh2 =nwb.get_sheet(1)
sh2.write(1,0,1000)
nwb.save('Config\成绩单.xls')
#endregion

4.修改表格内格式

#region 格式转变
import xlwt

# 设置写出格式字体红色加粗
styleBR = xlwt.easyxf('font: name Times New Roman, color-index red, bold on')
# 设置数字型格式为小数点后保留两位
styleNum = xlwt.easyxf(num_format_str='#,##0.00')
# 设置日期型格式显示为YYYY-MM-DD
styleDate = xlwt.easyxf(num_format_str='YYYY-MM-DD')

# 创建 xls 文件对象
wb = xlwt.Workbook()

# 新增两个表单页
sh1 = wb.add_sheet('成绩')
sh2 = wb.add_sheet('汇总')
# 然后按照位置来添加数据,第一个参数是行,第二个参数是列
sh1.write(0, 0, '姓名', styleBR)   # 设置表头字体为红色加粗
sh1.write(0, 1, '日期', styleBR)   # 设置表头字体为红色加粗
sh1.write(0, 2, '成绩', styleBR)   # 设置表头字体为红色加粗
# 插入数据
sh1.write(1, 0, '张三',)
sh1.write(1, 1, '2019-01-01', styleDate)
sh1.write(1, 2, 88, styleNum)
sh1.write(2, 0, '李四')
sh1.write(2, 1, '2019-02-02')
sh1.write(2, 2, 99.5, styleNum)

# 设置单元格内容居中的格式
alignment = xlwt.Alignment()
alignment.horz = xlwt.Alignment.HORZ_CENTER
style = xlwt.XFStyle()
style.alignment = alignment
# 合并A4,B4单元格,并将内容设置为居中
sh1.write_merge(3, 3, 0, 1, '总分', style)

# 通过公式,计算C2+C3单元格的和
sh1.write(3, 2, xlwt.Formula("C2+C3"))

# 对 sheet2 写入数据
sh2.write(0, 0, '总分', styleBR)
sh2.write(1, 0, 187.5)
# 最后保存文件即可
wb.save('./Config/成绩单1.xls')
#endregion

【全民Python】Python数据处理之Excel数据xlrd xlwt xlutils模块运用