python读写修改Excel之xlrd&xlwt&xlutils
作者:Sunny_Future 发布时间:2022-04-03 16:35:43
标签:python,读写,Excel
py读写修改常用的三种方法
xlwt:用于写入 Excel 文件
xlrd:用于读取 Excel 文件
xlutils:用于操作 Excel 文件的实用工具,比如复制、分割、筛选等
0、安装模块
pip3 install xlrd xlwt xlutils
1. 写入excel
git:https://github.com/python-excel/xlwt/tree/master/examples
实现效果
上代码
from datetime import datetime
import xlwt
font0 = xlwt.Font()
# font0.name = 'Times New Roman' # 适用于字母或数字
font0.name = '宋体' # 适用于中文,适配字体或者不指定字体才能体现出指定的颜色
# font0.colour_index = 1 # 白色
# font0.colour_index = 2 # 红色
# font0.colour_index = 3 # 绿色
# font0.colour_index = 4 # 蓝色
# font0.colour_index = 5 # 黄色
# font0.colour_index = 6 # 紫色
# font0.colour_index = 7 # 青色
# font0.colour_index = 8 # 黑色,比默认加黑,不加粗
font0.colour_index = 4 # 蓝色
font0.bold = True
style0 = xlwt.XFStyle()
style0.font = font0
# 创建样式对象:日期格式
style1 = xlwt.XFStyle()
style1.num_format_str = 'YYYY-MM-DD'
# 创建样式对象:字体居中对齐
style2 = xlwt.XFStyle()
al = xlwt.Alignment()
al.horz = 0x02 # 设置水平居中
al.vert = 0x01 # 设置垂直居中
style2.alignment = al
# 创建样式对象,设置日期格式与字体居中对齐
style3 = xlwt.XFStyle()
style3.num_format_str = 'YYYY-MM-DD'
style3.alignment = al
# 创建样式对象,设置字体居中 且 设置字体颜色
style4 = xlwt.XFStyle()
style4.alignment = al
style4.font = font0
now_time = datetime.now().strftime('%Y-%m-%d %X')
date_time = datetime.now().strftime('%Y-%m-%d')
# 创建表格
wb = xlwt.Workbook()
# 新建一个名为 Score Sheet 的表单页
score_sheet = wb.add_sheet('Score Sheet')
# 新建一个名为 Record Test Sheet 的表单页
record_test_sheet = wb.add_sheet('Record Test Sheet')
# 1、写入 Score Sheet 表单
# 设置 表头, 第一个参数是行,第二个参数是列
score_sheet.write(0, 0, '时间', style2)
score_sheet.write(0, 1, '班级', style2)
score_sheet.write(0, 2, '姓名', style2)
score_sheet.write(0, 3, '语文', style2)
score_sheet.write(0, 4, '数学', style2)
score_sheet.write(0, 5, '英语', style2)
score_sheet.write(0, 6, '理综', style2)
score_sheet.write(0, 7, '总分', style4)
# 按照位置添加数据
score_sheet.write(1, 0, datetime.now(), style3)
score_sheet.write(1, 1, '高三三班', style2)
score_sheet.write(1, 2, '桑岩', style2)
score_sheet.write(1, 3, 132, style2)
score_sheet.write(1, 4, 150, style2)
score_sheet.write(1, 5, 140, style2)
score_sheet.write(1, 6, 290, style2)
score_sheet.write(1, 7, xlwt.Formula("D2+E2+F2+G2"), style2)
score_sheet.write(2, 0, datetime.now(), style3)
score_sheet.write(2, 1, '高三三班', style2)
score_sheet.write(2, 2, '项天骐', style2)
score_sheet.write(2, 3, 140, style2)
score_sheet.write(2, 4, 150, style2)
score_sheet.write(2, 5, 132, style2)
score_sheet.write(2, 6, 280, style2)
score_sheet.write(2, 7, xlwt.Formula("D3+E3+F3+G3"), style2)
score_sheet.write(3, 0, datetime.now(), style3)
score_sheet.write(3, 1, '高三三班', style2)
score_sheet.write(3, 2, '向淮南', style2)
score_sheet.write(3, 3, 135, style2)
score_sheet.write(3, 4, 150, style2)
score_sheet.write(3, 5, 145, style2)
score_sheet.write(3, 6, 270, style2)
score_sheet.write(3, 7, xlwt.Formula("D4+E4+F4+G4"), style2)
# 2、写入 Record Test Sheet 表单
record_test_sheet.write(0, 0, '时间')
record_test_sheet.write(0, 1, '学科', style1)
record_test_sheet.write(0, 2, '成绩', style1)
record_test_sheet.write(1, 0, datetime.now(), style1)
record_test_sheet.write(1, 1, '语文', style2)
record_test_sheet.write(1, 2, 80)
record_test_sheet.write(2, 0, datetime.now(), style3)
record_test_sheet.write(2, 1, '数学', style2)
record_test_sheet.write(2, 2, 99)
record_test_sheet.write(3, 0, now_time, style2)
record_test_sheet.write(3, 1, '英语', style2)
record_test_sheet.write(3, 2, 98)
# 保存表格,这里应该是覆盖写,注意每次都是覆盖所有表单内容,建议每次生成的表单加上时间版本区分
# wb.save('example.xls')
wb.save('example-{0}.xls'.format(date_time))
2、读 Excel
git:https://github.com/python-excel/xlrd
实现效果,读取sheet 表单内容
数值 | 类型 | 说明 |
---|---|---|
0 | empty | 空 |
1 | string | 字符串 |
2 | number | 数字 |
3 | date | 日期 |
4 | boole | 布尔值 |
5 | error | 错误 |
代码
import xlrd
# 打开 xls文件
wb = xlrd.open_workbook("example-2021-03-09.xls")
# 获取并打印 sheet 数量
print("sheet 数量:", wb.nsheets) # sheet 数量: 2
# 获取并打印 sheet 名称
print("sheet 名称:", wb.sheet_names()) # sheet 名称: ['Score Sheet', 'Record Test Sheet']
# 根据 sheet 索引获取内容
sh1 = wb.sheet_by_index(0)
# 或者
# 也可根据 sheet 名称获取内容
# sh = wb.sheet_by_name('Score Sheet')
# 获取并打印该 sheet 行数和列数
print(u"sheet: %s表单 共 %d 行 %d 列" % (sh1.name, sh1.nrows, sh1.ncols)) # sheet: Score Sheet表单 共 4 行 8 列
# 获取并打印某个单元格的值
print("第一行第二列的值为:", sh1.cell_value(0, 1)) # 第一行第二列的值为: 班级
# 获取整行或整列的值
row_info = sh1.row_values(0) # 获取第一行内容
col_info = sh1.col_values(1) # 获取第二列内容
# 打印获取的行列值
print("第一行的值为:", row_info) # 第一行的值为: ['时间', '班级', '姓名', '语文', '数学', '英语', '理综', '总分']
print("第二列的值为:", col_info) # 第二列的值为: ['班级', '高三三班', '高三三班', '高三三班']
# 获取单元格内容的数据类型,注意这里的值 另有含义
print("第二行第一列的【值类型】为:", sh1.cell(1, 0).ctype) # 第二行第一列的【值类型】为: 3
# 遍历所有表单内容
for sh in wb.sheets():
for r in range(sh.nrows):
# 输出指定行内容,这里包含原有类型指定,不能直接获取到指定列的值
row_val_list = sh.row(r)
print(row_val_list)
# [text:'时间', text:'班级', text:'姓名', text:'语文', text:'数学', text:'英语', text:'理综', text:'总分']
# 遍历行内,输出当前行内的所有列值
col_val_list = [col_val.value for col_val in row_val_list]
print(col_val_list)
3、修改 Excel
修改 Excel 是通过 xlutils 库的 copy 方法将原来的 Excel 整个复制一份,然后再做修改操作,最后再保存
修改前
修改后
上代码
import xlrd
from xlutils.copy import copy
# 打开 excel 文件, 带格式复制
read_book = xlrd.open_workbook("example-2021-03-09.xls", formatting_info=True)
# 复制一份
wb = copy(read_book)
# 选取第一个表单
sh1 = wb.get_sheet(0)
# 在第五行新增写入数据
sh1.write(4, 0, '2020-12-16')
sh1.write(4, 1, '高三三班')
sh1.write(4, 2, '小鱼仙倌儿')
sh1.write(4, 3, 150)
sh1.write(4, 4, 150)
sh1.write(4, 5, 150)
sh1.write(4, 6, 300)
# 选取第二个表单
sh2 = wb.get_sheet(1)
# 替换总成绩数据
sh2.write(1, 2, 100)
# 保存
wb.save('example-2021-03-09.xls')
注意,复制 xls这里有格式问题
似乎没有任何简单的方法可以保留单元格的格式;它总是被吹走并设置为空白。
https://www.coder.work/article/80896
https://zhuanlan.zhihu.com/p/128674458
附录
参考:http://www.ityouknow.com/python/2019/12/29/python-excel-103.html
官网:http://www.python-excel.org/
来源:https://blog.csdn.net/Sunny_Future/article/details/114580291


猜你喜欢
- html的标签的属性,比如id、class、href需要动态传递参数,拼接字符串,查了一些资料,并没有找到合适的解决方法,琢磨了一上午,终于
- 问题描述:在pyhton脚本中logging.info("hello world")希望输出'hello wor
- 本文实例讲述了PHP实现将科学计数法转换为原始数字字符串的方法,分享给大家供大家参考。具体实现代码如下:function NumToStr(
- 在网页设计发展到一定阶段的时候就必然会和其他学科或领域只是产生交汇和共鸣,在阅读《超越CSS:web设计艺术精髓》这本书的时候,发现原来we
- 在Asp中如何得到所有表单的名称跟对应的值。其实,这个问题很简单,但是可能还是有很多人不知道该怎么做,所以特地写下来,仅供参考。在Asp程序
- 在FF下,如果内容含有FLASH,FLASH不会被隐藏掉,做为变通,我在收缩完成之后,将生成的内容容器隐藏掉了。<!DOCTYPE h
- js运行效果,含公历农历,生肖及节日的javascript日历代码:<html><head><meta htt
- 目录连接池是什么?为什么需要连接池?连接池的原理是什么?使用python语言自制简易mysql连接池开始使用自定义配置文件名 & 配
- MySQL Load Data 的多种用法一、LOAD 基本背景我们在数据库运维过程中难免会涉及到需要对文本数据进行处理,并导入
- 人们对于那些抄袭模仿的网站有诸多抱怨,但在这篇文章中,却没有冷嘲热讽的意思。但正如他们所说,“模仿是最为忠诚的奉承形式”。“如果你确实需要借
- 环境:go 1.19.8在读多写少的情况下,即使一段时间内没有写操作,大量并发的读访问也不得不在Mutex的保护下变成串行访问,这种情况下,
- 函数初解function,是一种语法结构,将实现某一个功能的代码块(多行代码)封装到一个结构中实现代码的重复利用函数定义语法:关键点:fun
- 偶然在Google发现了他们的用户体验设计原则,因此翻译作一下记录。1.以人为本 —他们的生活、他们的工作和他们的梦想2.珍惜每一毫秒的时间
- 在实用美术中,常有"远看色彩近看花,先看颜色后看花,七分颜色三分花"的说法。这也就说明,在任何设计中,色彩对视觉的刺激起
- 环境准备:全局安装jade: npm install jade -g初始化项目package.json: npm init --yes安装完
- 一.作用和使用场景在mysql入库时,不能出现两条数据主键一致的情况,因为在两条数据的主键一致的情况下,mysql就会判定为待插入数据在数据
- 我在用 ASP 写一个数据库的应用的时候,总是被那些看起来好好的SQL语句执行起来产生的错误代码搞得头疼,请问有没有更好的解决办法啊?有,我
- 1、简单应用代码如下:#!/usr/bin/env python# -*- coding: utf-8 -*-# @File : jieba
- 示意图:html:{# 用户管理 #} <div id="userManageDiv" style=&
- 前端代码要做到简洁易读、高效,还要考虑后端嵌套的方便性。前段时间做了一个导航,把整个制作过程重现,希望对大家有帮助。看到这样的导航,你会怎么