Python读写Excel
使用xlwt,xlrd,xlutils 模块处理Excel数据
1. 安装
1. 安装
pip install xlwt,xlrd,xlutils
#注意: xlrd=2.0.1 不能识别xlsx 需要卸载重装
pip uninstall xlrd
pip install xlrd==1.2.0
**常用函数**
- open_workbook() 打开工作簿
- sheet_names() 获取所有表单名称
**常用属性**
- object.nrows 查看表的总行数
- object.ncols 查看表的总列数
- object.cell(row, col).value 查看指定单元格中的值 (表格中的行和列是从0开始计数的)
2. 使用xlrd 读取Excel
import os
import xlrd
os.chdir('D:\\Downloads')
os.getcwd()
wb = xlrd.open_workbook('阿里巴巴2020年股票数据.xls')
#获取所有工作表
sheetnames = wb.sheet_names()
print(sheetnames)
#获取指定工作表
sheet = wb.sheet_by_name(sheetnames[0])
#nrows属性查看总行, ncols属性查看列
print(sheet.nrows, sheet.ncols)
value = sheet.cell(32, 2).value
print(value)
3. 使用xlwt 写入Excel
enumerate
enumerate的参数为可遍历/可迭代的对象(如列表、字符串)
enumerate多用于在for循环中得到计数,利用它可以同时获得索引和值,即需要index和value值的时候可以使用enumerate
# 例子,已知list1=[1, 2], 要求输出
0,1 #(index,value)
1,2
list1=[1, 2]
for index,value in enumerate(list1)
print(f'{index},{value}')
import xlwt
import random
s = ['关羽', '张飞', '赵云', '马超', '黄忠']
scores = [[random.randrange(50, 101) for _ in range(3)] for _ in range(5)]
#创建工作簿对象
wb = xlwt.Workbook()
#创建工作表对象
sheet = wb.add_sheet('一年级二班')
#添加表头数据 write(row,col,'str')
titles = ('姓名', '语文', '数学', '英语')
for index, title in enumerate(titles):
sheet.write(0, index, title)
"""
计算出成绩列表的长度为5,写入第1行的数据为s[0]
计算出成绩列表中的成绩个数,总共3个,写入到第1行,第1列, scores[0][0]=92
循环上述过程
"""
for row in range(len(scores)):
sheet.write(row + 1, 0, s[row])
for col in range(len(scores[row])):
sheet.write(row + 1, col + 1, scores[row][col])
wb.save('考试成绩表.xls')
4.调整单元格样式
在写Excel文件时,我们还可以为单元格设置样式,主要包括字体(Font)、对齐方式(Alignment)、边框(Border)和背景(Background)的设置,xlwt
对这几项设置都封装了对应的类来支持。要设置单元格样式需要首先创建一个XFStyle
对象,再通过该对象的属性对字体、对齐方式、边框等进行设定.
4.1 表头颜色
例子: 将上面的表格表头部分修改为黄色
header_style = xlwt.XFStyle()
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
# 0 - 黑色、1 - 白色、2 - 红色、3 - 绿色、4 - 蓝色、5 - 黄色、6 - 粉色、7 - 青色
pattern.pattern_fore_colour = 5
header_style.pattern = pattern
titles = ('姓名', '语文', '数学', '英语')
for index, title in enumerate(titles):
sheet.write(0, index, title, header_style)
4.2 表格字体
font = xlwt.Font()
# 字体名称
font.name = '华文楷体'
# 字体大小(20是基准单位,18表示18px)
font.height = 20 * 18
# 是否使用粗体
font.bold = True
# 是否使用斜体
font.italic = False
# 字体颜色
font.colour_index = 1
header_style.font = font
# 上面代码中指定的字体名(`font.name`)应当是本地系统有的字体,例如在我的电脑上有名为“华文楷体”的字体
4.3 表头垂直居中对齐
align = xlwt.Alignment()
# 垂直方向的对齐方式
align.vert = xlwt.Alignment.VERT_CENTER
# 水平方向的对齐方式
align.horz = xlwt.Alignment.HORZ_CENTER
header_style.alignment = align
4.4 表头添加黄色边框
borders = xlwt.Borders()
props = (
('top', 'top_colour'), ('right', 'right_colour'),
('bottom', 'bottom_colour'), ('left', 'left_colour')
)
# 通过循环对四个方向的边框样式及颜色进行设定
for position, color in props:
# 使用setattr内置函数动态给对象指定的属性赋值
setattr(borders, position, xlwt.Borders.DASHED)
setattr(borders, color, 5)
header_style.borders = borders
4.5 行高和列宽
# 设置行高为40px
sheet.row(0).set_style(xlwt.easyxf(f'font:height {20 * 40}'))
titles = ('姓名', '语文', '数学', '英语')
for index, title in enumerate(titles):
# 设置列宽为200px
sheet.col(index).width = 20 * 200
# 设置单元格的数据和样式
sheet.write(0, index, title, header_style)