使用Python操作Excel文件:xlrd、xlwt和openpyxl模块的详细教程与版本注意事项
本文将介绍对 Excel 文件的基本操作,这些操作是通过 Python 来实现的。其中包括利用 xlrd 模块来读取 Excel 文件,借助 xlwt 模块把数据写入 Excel 文件,以及运用 openpyxl 模块进行读取、写入和修改 Excel 文件的操作。

最近有一些朋友反映存在个别代码无法调试的情况,不过在我这里这些代码是可以调试的。我对这些代码都进行过调试,并且在之前的一年时间里,也没有朋友向我反馈过这些问题。因此,很大概率是版本方面的问题。
xlrd 的版本是 1.1.0 ,xlwt 的版本是 1.3.0 ,openpyxl 的版本是 2.5.4 。
目录
1、使用xlrd模块对xls文件进行读操作
假设我们有这样一张表,它是关于“农村居民家庭人均纯收入和农村居民家庭人均消费情况”的。这张表的后缀是.xls,其中包含两个工作表,分别是“各省市”和“测试表”。
提及一下,一个 Excel 文件就如同一个“工作簿”(workbook),并且一个“工作簿”内部能够包含多个“工作表(sheet)”。
1.1获取工作簿对象
引入模块,获得工作簿对象。
import xlrd #引入模块
打开文件,从而获取到 excel 文件的 workbook(工作簿)对象。
使用 xlrd 库打开名为“DataSource/Economics.xls”的文件,将其赋值给 workbook 变量。
1.2获取工作表对象
我们知道一个工作簿内可含有多个工作表。当获取到“工作簿对象”后,能够接着去获取工作表对象。获取工作表对象的方式有通过“索引”的方式,也有通过“表名”的方式。
'''对workbook对象进行操作'''
#获取所有sheet的名字
names=workbook.sheet_names()
输出所有的表名,以列表的形式,即打印出 names ,其值为['各省市', '测试表']
#通过sheet索引获得sheet对象
获取 workbook 中的第一个工作表,将其赋值给 worksheet 。即通过 workbook 的 sheet_by_index 方法获取索引为 0 的工作表,并将其赋值给 worksheet 。
print(worksheet) #
#通过sheet名获得sheet对象
workbook 中有一个名为“各省市”的工作表,通过 worksheet = workbook.sheet_by_name("各省市") 来获取该工作表。
print(worksheet) #
由上可知,workbook 的 sheet_names() 方法会返回一个 list 类型的对象,并且能够对这个 list 对象进行相关操作。
通过 sheet 索引来获取 sheet 名称,即 sheet0_name 等于 workbook.sheet_names()[0]
print(sheet0_name) #各省市
1.3获取工作表的基本信息
获得“表对象”之后,我们能够获取工作表的基本信息。这些信息包含表名,以及行数和列数。
'''对sheet对象进行操作'''
name=worksheet.name #获取表的姓名
print(name) #各省市
获取该表的总行数,赋值给 nrows,nrows 等于 worksheet.nrows
print(nrows) #32
获取该表总列数的方式是 ncols = worksheet.ncols
print(ncols) #13
1.4按行或列方式获得工作表的数据
有了行数和列数,循环打印出表的全部内容也变得轻而易举。
打印每一行
打印(worksheet.row_values(i)) # 以列表形式进行读取,列表中的每一项都属于 str 类型
各省市有工资性收入,有家庭经营纯收入,还有财产性收入等。
北京市的相关数据为 5047.4,1957.1,678.8,592.2,1879.0 等。其中包括 5047.4 这一数据,还有 1957.1 等其他数据,以及 678.8 等数据,也有 592.2 等数据,同时还有 1879.0 等数据。
获取第一列的内容,其方式为 worksheet.col_values(0),并将其赋值给 col_data
print(col_data)
1.5获取某一个单元格的数据
我们还可以将查询精确地定位到某一个单元格。
在xlrd模块中,工作表的行和列都是从0开始计数的。
#通过坐标读取表格中的数据
cell_value1 等于 sheet0 的 cell_value,其参数为 0 和 0
cell_value2 等于 sheet0 的单元格值,其行索引为 1,列索引为 0
print(cell_value1) #各省市
print(cell_value2) #北京市
sheet0 中第 0 行第 0 列的单元格的值为 cell_value1
print(cell_value1) #各省市
cell_value1 是 sheet0 中第 0 行第 0 列的单元格的值
print(cell_value1) #各省市
使用 xlwt 模块来对 xls 文件进行写操作。首先创建工作簿。
# 导入xlwt模块
import xlwt
创建一个 Workbook 对象,这就相当于创建了一个 Excel 文件。
创建一个名为 book 的对象,该对象是通过 xlwt.Workbook()函数创建的,在创建时指定了编码为"utf-8",并且设置了样式压缩为 0 。
'''
Workbook 类在进行初始化的时候,存在 encoding 参数和 style_compression 参数。
设置字符编码,通常需进行如下设置:使用 w = Workbook(encoding='utf-8'),这样就能在 excel 中输出中文了。而默认的是 ascii。
style_compression:表示是否压缩,不常用。
'''
2.2创建工作表
创建完工作簿之后,可以在相应的工作簿中,创建工作表。
创建一个 sheet 对象,该 sheet 对象与 Excel 文件中的一张表格相对应。
book 新增了一个名为'test01'的工作表,该工作表允许单元格被覆盖,新增的工作表赋值给了 sheet 。
其中的 test 是这张表的名称。cell_overwrite_ok 表示是否能够覆盖单元格,它实际上是 Worksheet 实例化时的一个参数,其默认值为 False。
2.3按单元格的方式向工作表中添加数据
# 向表test中添加数据
sheet 把“各省市”写入到指定的单元,这个指定的单元是通过“0 - 行,0 - 列”来确定的
sheet.write(0, 1, '工资性收入')
#也可以这样添加数据
txt1 = '北京市'
sheet.write(1,0, txt1)
txt2 = 5047.4
sheet.write(1, 1, txt2)
最后被文件被保存之后,上文语句形成的“工作表”如下所示: