轻松掌握Python中的Excel读写:xlutils、xlwt与xlrd的应用
在处理Excel文件时,Python提供了多个第三方库来帮助开发者读取、写入和修改数据。其中,xlrd
、xlwt
和xlutils
是一套常用于处理旧版Excel文件(.xls)的库。
xlrd
是一个用于读取Excel文件的Python库。它支持Excel 2003及其以前版本的文件格式(.xls)。使用xlrd
,你可以轻松提取Excel工作簿中的工作表数据,包括单元格的值、格式和公式。尽管公式通常以字符串的形式返回,而不是计算结果,但这对于需要分析Excel文件中的数据非常有用。
与xlrd
相对应的是xlwt
库,它用于写入Excel文件。特别是,它支持创建和编辑Excel 97-2003工作簿(.xls)格式的文件。通过xlwt
,你可以生成新的Excel文件,并向其中添加工作表、单元格数据和格式。
xlutils
是一个辅助库,它本身不直接读写Excel文件,而是作为xlrd
和xlwt
之间的桥梁。特别是,xlutils.copy
模块提供了一个方法,可以将通过xlrd
读取的工作簿对象复制到一个可以通过xlwt
修改的新工作簿对象中。这个库的存在使得你可以在读取现有Excel文件的基础上进行修改,并将更改保存为一个新的Excel文件。虽然xlutils
不能直接修改原始文件,但它提供了一种在Python中处理Excel文件的灵活方式。
注意,xlrd
、xlwt
与xlutils
只适合处理旧版Excel文件(.xls),对于较新的.xlsx格式,请使用其他库如openpyxl
来处理.xlsx文件。
安装
pip install xlrd
pip install xlwt
pip install xlutils
xlrd
xlrd
是一个用于读取.xls
文件的Python库,以下是它的常用方法
打开Excel文件
from xlrd import open_workbook
wb = open_workbook('example.xls')
获取sheet
一个Excel文件可能包含多个sheet,可以通过以下两种方式获取sheet:
通过索引获取:
sheet = wb.sheets()[0]
sheet = wb.sheet_by_index(0)
通过名称获取:
sheet = wb.sheet_by_name('Sheet1')
你也可以获取excel中所有的sheet的名字
names = wb.sheet_names()
完毕后,可以检查某个sheet是否导入完毕
wb.sheet_loaded(sheet_name or indx)
行操作
读取整行的值(有效数据),返回一个list
row_values = sheet.row_values(0, start_colx=0, end_colx=None) # 读取第一行的值(从0开始计数)
for value in row_values:
print(value)
获取该sheet中的有效行数
rows_count = sheet.nrows
读取整行的值(有效数据),返回一个list,里面包含了单元格对象
# 有两种办法,用法一致
rows = sheet.row(0) # 读取第一行的值,并返回一个包含单元格对象的列表
# rows = sheet.row_slice(0) # 读取第一行的值,并返回一个包含单元格对象的列表
for row in rows:
print(row.value)
读取整行的数据类型
rows = sheet.row_types(0, start_colx=0, end_colx=None) # 读取第一行的数据类型,返回一个包含int类型的数组
for row in rows:
print(row)
返回该行的有效单元格长度
cell_count = sheet.row_len(0) # 计算第一行的有效单元格长度
列操作
读取整列的值(有效数据),返回一个list
col_values = sheet.col_values(0) # 读取第一列的值(从0开始计数)
for value in col_values:
print(value)
获取该sheet中的有效列数
cols_count = sheet.ncols
读取整列的值(有效数据),返回一个list,里面包含了单元格对象
# 有两种办法,用法一致
cols = sheet.col(0) # 读取第一列的值,并返回一个包含单元格对象的列表
# cols = sheet.col_slice(0) # 读取第一列的值,并返回一个包含单元格对象的列表
for col in cols:
print(col.value)
读取整行的数据类型
cols = sheet.col_types(0, start_colx=0, end_colx=None) # 读取第一行的数据类型,返回一个包含int类型的数组
for col in cols:
print(col)
单元格操作
读取单元格的值
cell_value = sheet.cell(0, 0).value # 读取第一行第一列单元格的值
读取单元格中的数据类型
cell_type = sheet.cell_type(0, 0) # 读取第一行第一列单元格的数据类型
读取单元格中的格式
# 获取并打印一些格式信息
font = sheet.cell(0, 0).font
fill = sheet.cell(0, 0).fill
alignment = sheet.cell(0, 0).alignment
print(f"字体名称: {font.name}")
print(f"字体大小: {font.size}")
print(f"字体颜色: {font.color.rgb}")
print(f"填充颜色: {fill.fgColor.rgb if fill.fgColor else '无填充'}")
print(f"水平对齐: {alignment.horizontal}")
print(f"垂直对齐: {alignment.vertical}")
xlwt
xlwt
是一个用于写入.xls
文件的Python库,以下是它的常用方法
创建Workbook对象
from xlwt import Workbook
wb = Workbook(encoding='utf-8')
创建sheet
sheet = wb.add_sheet('My Worksheet')
写入数据
sheet.write(0, 0, "Value") # 将字符串'Value'写入到第一行第一列的单元格中。
设置样式
from xlwt import Workbook, XFStyle, Font, Borders, Pattern, Alignment, Style
# 创建一个新的Excel
wb = Workbook()
# 添加一个新的工作表
worksheet = wb.add_sheet('Test')
# 创建一个样式对象
style = XFStyle()
# 创建一个字体对象
font = Font()
font.name = 'Arial'
font.bold = True
font.italic = True
font.colour_index = 4# 红色
# 创建一个边框对象
borders = Borders()
borders.left = Borders.THIN
borders.right = Borders.THIN
borders.top = Borders.THIN
borders.bottom = Borders.THIN
# 创建一个背景色对象
pattern = Pattern()
pattern.pattern = Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = Style.colour_map['yellow'] # 黄色背景
# 创建一个对齐方式对象
alignment = Alignment()
alignment.horz = Alignment.HORZ_CENTER# 水平居中
alignment.vert = Alignment.VERT_CENTER# 垂直居中
# 将这些样式应用到之前创建的样式对象上
style.font = font
style.borders = borders
style.pattern = pattern
style.alignment = alignment
# 写入数据到单元格,并应用样式
sheet.write(0, 0, 'Formatted Cell', style)
# 保存Excel
wb.save('test.xls')
保存Excel
wb.save('test.xls')
xlwt保存的.xls文件不会保留原有的样式格式。当你使用xlwt
创建一个新的Excel文件或写入数据时,你需要显式地设置所需的样式和格式。
xlutils
xlutils
是一个辅助库,可以在读取现有Excel文件的基础上进行修改,并将更改保存为一个新的Excel文件。
xlutils
可以将xlrd
的Book
对象复制转换为xlwt
的Workbook
对象,具体使用时通常导入的是模块中的copy
子模块中的copy
函数。
from xlrd import open_workbook
from xlutils.copy import copy
# 打开Excel
workbook = open_workbook('test.xls')
# 复制Excel
new_workbook = copy(workbook)
# 获取Excel中的第一个Sheet
# worksheet = new_workbook.get_sheet(0) # 通过索引获取
worksheet = new_workbook.get_sheet("Sheet1") # 通过sheet名称获取
# 写入新的数据
worksheet.write(0, 0, 'New Data')
# 保存Excel
new_workbook.save('test.xls')
在使用get_sheet获取了sheet之后,往后写入数据的操作和xlwt的方法基本一致(因为xlutils是将xlrd
的Book
对象复制转换为xlwt
的Workbook
对象而已),所以和xlwt一样,xlutils保存的.xls文件不会保留原有的样式格式