前言
Python操作Excel的模块有很多,并且各有优劣,不同模块支持的操作和文件类型也有不同。最常用的Excel处理库有xlrd、xlwt、xlutils、xlwings、openpyxl、pandas,下面是各个模块的支持情况:
工具名称 | .xls | .xlsx | 获取文件内容 | 写入数据 | 修改文件内容 | 保存 | 样式调整 | 插入图片 |
---|---|---|---|---|---|---|---|---|
xlrd | √ | √ | √ | × | × | × | × | × |
xlwt | √ | × | × | √ | × | √ | √ | √ |
xlutils | √ | × | × | √ | √ | √ | × | × |
xlwings | √ | √ | √ | √ | √ | √ | √ | √ |
openpyxl | × | √ | √ | √ | √ | √ | √ | √ |
pandas | √ | √ | √ | √ | × | √ | × | × |
对比会发现,其中xlwings的功能是最全最强大的,其实它的执行效率也是最高的。但是xlwings的学习难度相对比较大,而且里面的很多的概念和操作方式和平时操作Excel的时候不一样。openpyxl 的问题是不能操作老版本的excel文件(.xls),以及在操作数据的时候必须以单元格为单位操作,无法直接以行或者列的方式操作文件内容。xlrd、xlwt和xlutils三个模块配合使用可以很方便的对excel文件进行读、写和修改操作,也可以更方便的以行列的方式操作Excel文件,但是缺点是无法对.xlsx文件进行写和修改操作。在解决实际问题的时候读者可以根据自己的实际需求选择使用合适的工具。
下面主要介绍xlrd、xlwt模块如何实现对.xls和.xlsx文件进行读写操作。
1. Excel文件中的工作簿、工作表
在使用工具库操作Excel之前,我们先来了解一下Excel中工作簿、工作表的感念。
1.1 工作簿
工作簿:excel工作簿就是excel电子表格文件。excel是以工作薄来存储数据的,工作簿文件是excel存储在磁盘上的最小独立文件,它由多个工作表组成,在excel中数据和图表都是以工作表的形式存储在工作簿文件中的。简单的来说一个Excel文件(.xls、.xlsx)就是一个工作簿。
1.2 工作表
工作表:工作表是显示在工作簿窗口中的表格,一个工作表可以由1048576行和256列构成,行的编号从1到1048576,列的编号依次用字母A、B ……IV表示,行号显示在工作簿窗口的左边,列号显示在工作簿窗口的上边。
Excel默认一个工作簿有三个工作表,用户可以根据需要添加工作表,但每一个工作簿中的工作表个数受可用内存的限制,当前的主流配置已经能轻松建立超过255个工作表了。
2. 使用xlrd读取Excel文件数据
2.1 安装xlrd
pip install xlrd
2.2 打开工作簿
# 引入xlrd
import xlrd
# 打开Excel文件
workbook = xlrd.open_workbook("E:\\studyproject\\python\\Excel数据读取\\费县摸排数据\\林种.xls")
2.3 获取与打开工作表
一个工作簿中通常有多个工作表,我们可以使用sheet_names()方法获取所有工作表
# 获取打开工作簿中的所有工作表名 返回工作表名称列表
sheet_names = workbook.sheet_names()
# 数据结果
# ['Sheet1','Sheet2','Sheet3']
上一步中我们获取到了,我们可以通过工作表名称或者工作表的排序索引打开工作表
# 通过工作表名称打开工作表
worksheet = workbook.sheet_by_name('Sheet1')
# 通过工作表排序的索引打开工作表
worksheet = workbook.sheet_by_index(0)
也可以通过sheets()方法来获取全部工作表
# #获取所有的sheet对象
sheets = workbook.sheets()
for sheet in sheets:
print(sheet.name)#结果: 1班 2班
2.4 读取单元格数据
获取到工作表之后,我们可以通过rows和cols两个属性来获取工作表的行数和列数
# 工作表行数
rows = worksheet.nrows
# 工作表列数
cols = worksheet.ncols
通过行号和列表获取指定单元格中的数据
worksheet.cell_value(row, col)
获取指定行的某几列
worksheet.row_values(row,start_col,end_col)
获取指定列的某几行
worksheet.col_values(col,start_row,end_row)
2.5 应用实例
将Excel数据处理转换为json数据,是日常工作中最常见的一项实例,下面的实例我们就使用xlrd将读取Excel文件,转换获取json数据
import xlrd
import json
workbook = xlrd.open_workbook("E:\\studyproject\\python\\Excel数据读取\\摸排数据\\水源地.xls")
worksheet = workbook.sheet_by_name('Sheet1')
# 获取所有行数和列数
rows = worksheet.nrows
cols = worksheet.ncols
arr = []
for row in range(rows):
obj = {}
for col in range(cols):
obj[worksheet.cell_value(0, col)] = worksheet.cell_value(row, col)
arr.append(obj)
print(arr)
josnstr = json.dump(arr)
# # print(josnstr)
3. 使用xlrw实现Excel写入数据
3.1 安装xlrw
pip install xlwt
3.2 创建工作簿
# 导入工具包
import xlwt
# 创建一个工作簿
workbook = xlwt.Workbook(encoding="utf-8")
3.3 创建工作表
# 创建一个工作表
worksheet = workbook.add_sheet('小马过河')
3.4 往单元格里写入数据
通过行号和列号往Excel表格中写入内容
# 参数对应 行, 列, 值
worksheet.write(1,0, label = 'hello world!')
最后保存生成(.xls)格式的Excel文件
# 保存
workbook.save('学习笔记.xls')
3.5 实际应用实例
将从数据库中读取的数据写入到Excel文件中
import pymysql
import xlwt
# 创建数据库链接对象
database = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="toutiao",
port=3306,
charset="utf8"
)
# 创建游标对象
cursor = database.cursor()
# 游标对象使用execute()方法执行SQL语句
try:
workbook = xlwt.Workbook(encoding="utf-8")
worksheet = workbook.add_sheet("热门文章")
# 执行查询语句
cursor.execute("select title,publish_time,like_count,read_count,comment_count from happy limit 1,10")
# 获取查询结果
result = cursor.fetchall()
for i in range(0,len(result)):
for j in range(0,len(result[i])):
worksheet.write(i,j,label=result[i][j])
except Exception as e:
print(e)
finally:
# 关闭游标
cursor.close()
# 关闭数据库
database.close()
workbook.save("热门文章.xls")