大家好 我是政胤
大家平时在工作与学习中都会操作到Excel文件格式,特别是很多数据的时候,靠人力去识别操作非常容易出错。今天就带大家用Python来处理Excel文件
工具 :
python3.7
Pycharm
Excel
xlwt&xlrd
读取Excel文件内容:
当前文件夹下有一个名为“股票数据.xlsx”的Excel文件,可以按照下列代码方式来操作它。
import xlrd # 使用xlrd模块的open_workbook函数打开指定Excel文件并获得Book对象(工作簿) wb =
xlrd.open_workbook('股票数据.xlsx') # 通过Book对象的sheet_names方法可以获取所有表单名称 sheetname =
wb.sheet_names()[0] # 通过指定的表单名称获取Sheet对象(工作表) sheet =
wb.sheet_by_name(sheetname) # 通过Sheet对象的nrows和ncols属性获取表单的行数和列数
print(sheet.nrows, sheet.ncols) for row in range(sheet.nrows): for col in
range(sheet.ncols): # 通过Sheet对象的cell方法获取指定Cell对象(单元格) #
通过Cell对象的value属性获取单元格中的值 value = sheet.cell(row, col).value #
对除首行外的其他行进行数据格式化处理 if row > 0: #
第1列的xldate类型先转成元组再格式化为“年月日”的格式 if col == 0: #
xldate_as_tuple函数的第二个参数只有0和1两个取值 #
其中0代表以1900-01-01为基准的日期,1代表以1904-01-01为基准的日期 value =
xlrd.xldate_as_tuple(value, 0) value =
f'{value[0]}年{value[1]:>02d}月{value[2]:>02d}日' #
其他列的number类型处理成小数点后保留两位有效数字的浮点数 else: value =
f'{value:.2f}' print(value, end='\t') print() # 获取最后一个单元格的数据类型 # 0
- 空值,1 - 字符串,2 - 数字,3 - 日期,4 - 布尔,5 - 错误 last_cell_type =
sheet.cell_type(sheet.nrows - 1, sheet.ncols - 1) print(last_cell_type) #
获取第一行的值(列表) print(sheet.row_values(0)) # 获取指定行指定列范围的数据(列表) #
第一个参数代表行索引,第二个和第三个参数代表列的开始(含)和结束(不含)索引 print(sheet.row_slice(3, 0, 5))
写入Excel文件内容
Excel文件写入可以通过xlwt 模块的Workbook类创建工作簿对象,通过工作簿对象的add_sheet方法可以添加工作表,通过工作表对象的
write方法可以向指定单元格中写入数据,最后通过工作簿对象的save方法将工作簿写入到指定的文件或内存中。下面代码操作了一个学员成绩表的写入。
import random import xlwt student_names = ['关羽', '张飞', '赵云', '马超', '黄忠']
scores = [[random.randint(40, 100) for _ in range(3)] for _ in range(5)] #
创建工作簿对象(Workbook) wb = xlwt.Workbook() # 创建工作表对象(Worksheet) sheet =
wb.add_sheet('一年级二班') # 添加表头数据 titles = ('姓名', '语文', '数学', '英语') for index,
title in enumerate(titles): sheet.write(0, index, title) # 将学生姓名和考试成绩写入单元格
for row in range(len(scores)): sheet.write(row + 1, 0, student_names[row])
for col in range(len(scores[row])): sheet.write(row + 1, col + 1,
scores[row][col]) # 保存Excel工作簿 wb.save('考试成绩表.xlsx')
Excel文件样式调整
还可以通过XFStyle
对象来设置单元格的不同样式。主要包括字体(Font)、对齐方式(Alignment)、边框(Border)和背景(Background)的设置。
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)
设置表头的位置
align = xlwt.Alignment() # 垂直方向的对齐方式 align.vert = xlwt.Alignment.VERT_CENTER #
水平方向的对齐方式 align.horz = xlwt.Alignment.HORZ_CENTER header_style.alignment =
align 1
设置单元格的宽高
# 设置行高为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)
感谢大家支持