写点什么

利用 Python 实现自动操作 Excel 文件

  • 2022 年 6 月 02 日
  • 本文字数:1790 字

    阅读完需:约 6 分钟

工具 :

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 = 5header_style.pattern = patterntitles = ('姓名', '语文', '数学', '英语')for index, title in enumerate(titles):    sheet.write(0, index, title, header_style)


复制代码

设置单元格的宽高

# 设置行高为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)

复制代码

第一次在此平台发布文章 还请大家多多关注

用户头像

还未添加个人签名 2020.02.16 加入

还未添加个人简介

评论

发布
暂无评论
利用Python实现自动操作Excel文件_弑着去忘记う_InfoQ写作社区