简介
库 | 主要功能 | 支持excel |
---|---|---|
xlrd | 读取excel | .xls 和 .xlsx |
xlwt | 写入excel(缺点:只能写入全新excel,不能再原有的excel上追加内容) | .xls |
xlutils | 结合xlrd使用,实现读写excel | .xls 和 .xlsx (保存只能用.xls) |
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 # (行,列)
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, '测试写入内容') # (行,列,值)
# 单元格写入超链接
sheet.write(1, 1, xlwt.Formula('HYPERLINK("http://www.google.com";"Google")'))
# 单元格写入公式
sheet.write(1, 1, xlwt.Formula('SUM(A1,B1)')) # 公式与excel一致,这里不用加'='
# 合并单元格
sheet.write_merge(0, 2, 0, 3, '合并单元格') # (行,行,列,列,值)
# 设置列宽
sheet.col(0).width = 256 * 20 # 256为衡量单位,20表示20个字符宽度
# 保存excel
new_wb.save(file_path)
注意:如果你的excel有用什么公式,数据验证等,在使用脚本保存后,都会不见了(目前还没有找到解决方法)
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
报错: PermissionError: [Errno 13] Permission denied: ‘E:\PyProject\Test_Pratice\test_excel.xls’
原因: 进行保存时,没有关闭要保存的excel
解决方法: 关闭要保存的excel,再执行程序即可
报错: NotImplementedError(“formatting_info=True not yet implemented”)
原因: 应该是excel格式为.xlsx,使用formatting_info=True参数时,目前只有.xls格式才支持
解决方法: 可将excel文件格式改为.xls
原因: 使用xlrd+xlutils,在 保存 excel文件时,实际上用的xlwt来保存的,由于xlwt只支持.xls格式,程序执行完后不会报错,但是一打开excel就会报错,所以一般使用xlrd+xlutils来进行读写保存时,建议用.xls格式的excel
解决方法: 可将excel文件格式改为.xls
先记录到这里,如果有什么不对的地方,希望指出来哈