python-操作excel,使用xlrd、xlutils、xlwt读写excel、设置样式

简介

主要功能 支持excel
xlrd 读取excel .xls 和 .xlsx
xlwt 写入excel(缺点:只能写入全新excel,不能再原有的excel上追加内容) .xls
xlutils 结合xlrd使用,实现读写excel .xls 和 .xlsx (保存只能用.xls)

一、使用xlrd读取excel

import xlrd

# excel文件路径
file_path = r'E:\PyProject\Test_Pratice\test_excel.xls'

# 打开文件
wb = xlrd.open_workbook(file_path)

# 获取一个所有sheet名称的列表
sheets = wb.sheet_names()

# 获取一个所有sheet对象的列表
sheets_object = wb.sheets()

# 判断指定sheet(可填索引或表名)是否存在,返回一个bool值
sheet_loaded = wb.sheet_loaded(sheet_name_or_index=1)

# 根据索引获取sheet
sheet = wb.sheet_by_index(0)

# 根据表名获取sheet
sheet = wb.sheet_by_name('sheet1')

# 获取sheet的名称,行数,列数
name = sheet.name  # 名称
rows = sheet.nrows  # 行数
cols = sheet.ncols  # 列数

# 获取整行和整列的值(列表)
rows_value = sheet.row_values(4)  # 获取第五行内容
cols_value = sheet.col_values(2)  # 获取第三列内容

# 获取单元格内容(三种方式)
cell_value1 = sheet.cell(1, 0).value  # (行,列)
cell_value2 = sheet.cell_value(1, 0)  # (行,列)
cell_value3 = sheet.row(1)[0].value  # (行,列)

# 获取单元格数据类型
get_cell_type = sheet.cell(1, 1).ctype  # (行,列)

下图为excel的数据类型
在这里插入图片描述

二、使用xlrd + xlutils写入数据

import xlrd
from xlutils.copy import copy

# excel文件路径
file_path = r'E:\PyProject\Test_Pratice\test_excel.xls'

# 打开文件
wb = xlrd.open_workbook(file_path, formatting_info=True)  # formatting_info=True 保存excel时,保留excel原有的格式
new_wb = copy(wb)  # 将xlrd的对象转化为xlwt的对象

# 根据索引或表名获取sheet
sheet = new_wb.get_sheet('sheet1')

# 单元格写入内容
sheet.write(1, 1, '测试写入内容')  # (行,列,值)

# 保存excel
new_wb.save(file_path)

三、使用xlwt设置样式

import xlwt
from xlrd import open_workbook
from xlutils.copy import copy

# 封装一些常用的样式
def set_style(name='宋体', height=220, bold=False):
	style = xlwt.XFStyle()  # 初始化样式
	
	font = xlwt.Font()  # 为样式创建字体
	font.name = name  # 定义具体的字体
	font.bold = bold  # 定义是否加粗
	font.color = 'black'  # 黑色
	font.color_index = 4  # 定义字体颜色
	font.height = height  # 定义字体大小  220就是11号字体,基数20*号数,11号字体就是20*11=220
	style.font = font  # 最终把自定义的字体,定义到风格里面
	
	alignment = xlwt.Alignment()  # 设置字体在单元格的位置
	alignment.horz = xlwt.Alignment.HORZ_CENTER  # 水平方向 居中:HORZ_CENTER  左对齐:HORZ_LEFT  右对齐:HORZ_RIGHT
	alignment.vert = xlwt.Alignment.VERT_CENTER  # 垂直方向 居中:VERT_CENTER  顶部对齐:VERT_TOP  底部对齐:VERT_BOTTOM
	style.alignment = alignment
	
	border = xlwt.Borders()  # 给单元格加框线
	border.left = xlwt.Borders.THIN  # 左
	border.top = xlwt.Borders.THIN  # 上
	border.right = xlwt.Borders.THIN  # 右
	border.bottom = xlwt.Borders.THIN  # 下
	border.left_colour = 0x40  # 设置框线颜色,0x40是黑色
	border.right_colour = 0x40
	border.top_colour = 0x40
	border.bottom_colour = 0x40
	style.borders = border
	
	return style

# 写入数据并设置样式
def write_excel():
    # excel文件路径
	file_path = r'E:\PyProject\Test_Pratice\test_excel.xls'

	# 打开文件
	wb = xlrd.open_workbook(file_path, formatting_info=True)  # formatting_info=True 保存excel时,保留excel原有的格式
	new_wb = copy(wb)  # 将xlrd的对象转化为xlwt的对象

	# 根据索引或表名获取sheet
	sheet = new_wb.get_sheet('sheet1')

	# 写入并设置样式,参数分别为(行,列,值,刚才封装的样式函数)
	sheet.write(1, 1, '测试写入内容',set_style()) 

	# 保存excel
	new_wb.save(file_path)

更多样式可参考blog:https://www.cnblogs.com/caesar-id/p/11802440.html

常见问题

1.PermissionError

报错: PermissionError: [Errno 13] Permission denied: ‘E:\PyProject\Test_Pratice\test_excel.xls’
原因: 进行保存时,没有关闭要保存的excel
解决方法: 关闭要保存的excel,再执行程序即可

2.NotImplementedError

报错: NotImplementedError(“formatting_info=True not yet implemented”)
原因: 应该是excel格式为.xlsx,使用formatting_info=True参数时,目前只有.xls格式才支持
解决方法: 可将excel文件格式改为.xls

3.Excel无法打开文件"xxx.xlsx"

在这里插入图片描述
原因: 使用xlrd+xlutils,在 保存 excel文件时,实际上用的xlwt来保存的,由于xlwt只支持.xls格式,程序执行完后不会报错,但是一打开excel就会报错,所以一般使用xlrd+xlutils来进行读写保存时,建议用.xls格式的excel
解决方法: 可将excel文件格式改为.xls

先记录到这里,如果有什么不对的地方,希望指出来哈

原创文章 5 获赞 13 访问量 511

猜你喜欢

转载自blog.csdn.net/weixin_47154909/article/details/105639047
今日推荐