Python 操作 Excel

# 可以根据需求不同,选择合适的工具,这里主要为大家介绍最常用的xlrd & xlwt & xlutils系列工具的使用

xlrd & xlwt & xlutils 介绍

xlrd & xlwt & xlutils 顾名思义就是由以下三个库组成:
xlrd:负责对Excle文件的读取操作
xlwt:负责对Excle文件的写入操作
xlutils:用于操作Excel文件的实用工具,比如复制,分割,筛选等

安装库

安装比较简单,直接用 pip 工具安装三个库即可,安装命令如下:

$ pip3 install xlrd xlwt xlutils

安装完成后提示有"successfully…"字样即表示安装成功

写入Excel

# 导入xlrd库
import xlwt
# 创建Excel 文件对象
wb = xlwt.Workbook()
# 新增两个sheet表单
sheet1 = wb.add_sheet('成绩')
sheet2 = wb.add_sheet('汇总')
# 按照位置来添加数据,第一个参数是行,第二个参数是列
# 写入第一个sheet1
sheet1.write(0,0,'姓名')
sheet1.write(0,1,'成绩')
sheet1.write(1,0,'张三')
sheet1.write(1,1,90)
sheet1.write(2,0,'李四')
sheet1.write(2,1,98)

# 写入第二个sheet2
sheet2.write(0,0,'总分')
sheet2.write(1,0,188)

# 最后保存文件即可
wb.save('test_wt.xls')

执行以上代码 会自动生成名为test_wt.xls的Excel文件,打开文件查看如下图所示:
在这里插入图片描述

在这里插入图片描述

读取 Excel

# 导入函数库 xlrd
import xlrd

# 打开刚才我们写入的 test_wt.xls 文件
wb = xlrd.open_workbook('test_wt.xls')

# 获取并打印sheet数量
print('sheet 数量:',wb.nsheets)

# 打印sheet名称
print('sheet 名称:',wb.sheet_names())

# 根据sheet索引获取内容
sheet1 = wb.sheet_by_index(0)
# 也可以根据sheet名称获取内容
# sheet1 = wb.sheet_by_name('成绩')

# 获取并打印该sheet行数和列数
print(u'sheet %s 共 %d 行 %d 列' % (sheet1.name,sheet1.nrows,sheet1.ncols))

# 获取并打印某个单元格的值
print("第一行第二列的值:",sheet1.cell_value(0,1))


# 获取整行或整列的值
rows = sheet1.row_values(0) # 获取第一行内容
cols = sheet1.col_values(1) # 获取第一列内容

# 打印获取行列值
print("第一行的值为:",rows)
print("第一列的值为:",cols)

# 获取单元格内容的数据类型
print("第二行第一列的值类型为:",sheet1.cell(1,0).ctype)

# 遍历所有表单内容
for sh in wb.sheets():
    # 遍历每个表单的每一行
    for r in range(sh.nrows):
        # 输出指定行
        print(sh.row(r))


sheet 数量: 2
sheet 名称: ['成绩', '汇总']
sheet 成绩 共 3 行 2 列
第一行第二列的值: 成绩
第一行的值为: ['姓名', '成绩']
第一列的值为: ['成绩', 90.0, 98.0]
第二行第一列的值类型为: 1
[text:'姓名', text:'成绩']
[text:'张三', number:90.0]
[text:'李四', number:98.0]
[text:'总分']
[number:188.0]

单元格的类型:

数值类型说明
0empty
1string字符串
2number数字
3date日期
4boolean布尔值
5error错误

通过上面表格,我们可以知道刚获取单元格类型返回的数字1对应的就是字符串类型。

修改Excel

上面说了写入和读取 Excel 内容,接下来我们就说下更新修改 Excel 该如何操作,修改时就需要用到 xlutils 中的方法了。

# 导入相应的模块
import xlrd
from xlutils.copy import copy

# 打开相应的 Excel 文件
readbook = xlrd.open_workbook('test_wt.xls')

# 复制一份
wb = copy(readbook)

# 选取第一个表单
sheet1 = wb.get_sheet(0)

# 在第四行新增写入数据
sheet1.write(3,0,'王亮')
sheet1.write(3,1,100)

# 选取第二个表单
sheet2 = wb.get_sheet(1)

# 替换总成绩数据
sheet2.write(1,0,288)

# 保存
wb.save('test_wt1.xls')

从上面代码可以看出,这里的修改 Excel 是通过 xlutils 库的 copy 方法将原来的 Excel 整个复制一份,然后再做修改操作,最后再保存。

执行完以上代码会自动生成test_wt1.xls文件,打开后如下图所示:

在这里插入图片描述

在这里插入图片描述

格式转换操作

# 导入 xlwt 库
import xlwt

# 设置写出格式字体红色加粗
styleBR = xlwt.easyxf('font: name Times New Roman, color-index red, bold on')

# 设置数字型格式为小数点后保留两位
styleNum = xlwt.easyxf(num_format_str='#,##0.00')

# 设置日期型格式显示为YYYY-MM-DD
styleDate = xlwt.easyxf(num_format_str='YYYY-MM-DD')

# 创建 xls 文件对象
wb = xlwt.Workbook()

# 新增两个表单页
sh1 = wb.add_sheet('成绩')
sh2 = wb.add_sheet('汇总')

# 然后按照位置来添加数据,第一个参数是行,第二个参数是列
sh1.write(0, 0, '姓名', styleBR)   # 设置表头字体为红色加粗
sh1.write(0, 1, '日期', styleBR)   # 设置表头字体为红色加粗
sh1.write(0, 2, '成绩', styleBR)   # 设置表头字体为红色加粗

# 插入数据
sh1.write(1, 0, '张三',)
sh1.write(1, 1, '2019-01-01', styleDate)
sh1.write(1, 2, 88, styleNum)
sh1.write(2, 0, '李四')
sh1.write(2, 1, '2019-02-02')
sh1.write(2, 2, 99.5, styleNum)

# 设置单元格内容居中的格式
alignment = xlwt.Alignment()
alignment.horz = xlwt.Alignment.HORZ_CENTER
style = xlwt.XFStyle()
style.alignment = alignment

# 合并A4,B4单元格,并将内容设置为居中
sh1.write_merge(3, 3, 0, 1, '总分', style)

# 通过公式,计算C2+C3单元格的和
sh1.write(3, 2, xlwt.Formula("C2+C3"))

# 对 sheet2 写入数据
sh2.write(0, 0, '总分', styleBR)
sh2.write(1, 0, 187.5)

# 最后保存文件即可
wb.save('test_wt2.xls')

然后我们执行以上代码命令,自动生成文件 test_w3.xls ,我们来看看效果怎么样。

在这里插入图片描述
在这里插入图片描述

可以看出,使用代码我们可以对字体,颜色、对齐、合并等平时 Excel 的操作进行设置,也可以格式化日期和数字类型的数据。当然了这里我们只是介绍了部分功能,不过这已经足够我们日常使用了,想了解更多功能操作可以参考文末官网。

骚话时间: 看得见你的地方,我的眼睛和你在一起。看不见你的地方,我的心和你在一起。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值