day08-代码操作xls文件
day08-代码操作xls文件
01代码发送学生成绩
1. 准备数据
# 导入openpyxl库
import openpyxl# 导入smtplib库
import smtplibfrom email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText# 1) 获取excel文件中两张表中的数据
wb = openpyxl.open('xxx.xlsx')
stu_sheet = wb['学生信息']
con_sheet = wb['学生联系方式']# 获取第一张表中的数据
stu_info = []
m_r1, m_c1 = stu_sheet.max_row, stu_sheet.max_column
for row in range(2, m_r1 + 1):stu = {}for col in range(1, m_c1 + 1):stu[stu_sheet.cell(1, col).value] = stu_sheet.cell(row.col).valuestu_info.append(stu)# 2) 对数据按照有联系方式的学生的名字对前面那张表中的数据进行筛选
connect_info = []
m_r2, m_c2 = con_sheet.max_row, con_sheet.max_column
all_con = []
for row in range(2, m_r2 + 1):con = {}name = con_sheet.cell(row, 1).valueaddress = con_sheet.cell(row, 4).valuecon['name'] = addressfor stu in stu_info:if value['姓名'] == name:con['msg'] = '%s同学你好, 以下是你本次期末考试各科成绩: \n%s' % (name, stu)all_con.append(con)
2. 发邮件
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)connect.login('发件人邮箱账号', '授权码')# 遍历拿到每个联系人信息, 构建对应的邮件并发送
for con in all_con:address = con['email']message = con['msg']email = MIMEMultipart()email['Subject'] = Header('考试成绩', 'utf-8').encode()email['From'] = 'xxx <发件人邮箱账号>'email['To'] = addressmsg = MIMEText(message, 'plain')email.attach(msg)connect.sendmail('收件人邮箱账号', address, email.as_string())
02xls文件读操作
# 导入xlrd库
import xlrd
1. 打开excel文件获取工作簿对象
wb = xlrd.open_workbook('xxx.xls')
2. 获取所有工作表的表名
names = wb.sheet_names()
3. 获取工作表
工作簿对象.sheet_by_name(表名)
– 获取指定表名对应的工作表
sheet1 = wb.sheet_by_name('students')
工作簿对象.sheet_by_index(下标)
– 获取指定下标对应的工作表
sheet2 = wb.sheet_by_index(1)
4. 获取表的行数和列数(有数据部分的行和列)
print(sheet1.nrows)print(sheet1.ncols)
5. 按行或者按列获取数据
工作表.row_values(行下标) | 获取指定行所有的数据 |
---|---|
工作表.col_values(列下标) | 获取指定列所有的数据 |
工作表.row_values(行下标, 开始列下标, 结束列下标) | 获取指定行中指定范围的数据 |
工作表.col_values(列下标, 开始行下标, 结束行下标) | 获取指定列中指定范围的数据 |
result = sheet1.row_values(1)
print(result) # 获取表格第二行的所有数据
result = sheet1.col_values(3)
print(result) # 获取表格第四列中所有的数据
result = sheet1.row_values(2, 0, 3)
print(result) # 获取第三行第一列到第三列中的数据
6. 获取指定单元格中的数据
# 工作表.cell_value(行下标, 列下标)
result = sheet1.cell_value(0, 0)
print(result) # 获取表格中第0行第0列单元格中的数据
# 练习: 读excel文件data1.xls 中students表中的数据, 得到一个大列表, 列表中的每个元素是每一行内容对应的小列表stu_sheet = wb.sheet_by_name('students')
# 获取行数量
num_row = stu_sheet.nrows
# 每一行对应一个小列表
datas = []
for index in range(1, num_row):line = stu_sheet.row_values(index)datas.append(line)
# 每一行对应一个小字典
datas = []
keys = stu_sheet.row.values(0)
for index in range(1, num_row):line = stu_sheet.row_values(index)stu = {}for x in range(len(keys)):key = keys[x]value = line[x]stu[key] = valuedata.append(stu)
04xls文件写操作
# 导入xlwt库
import xlwt
1. 新建工作簿
wb = xlwt.Workbook()
2. 新建工作表
stu_sheet = wb.add_sheet('students')
3. 写入数据
# 工作表.write(行下标, 列下标, 数据)stu_sheet.write(0, 0, 'name')
4. 保存文件
wb.save('xxx.xls')
05xls文件写操作练习
# 写入到data3.xls文件中
# 第一行的内容分别是: name、gender、age、scoreimport xlwtdata = [['小明', '男', 20.0, 99.0],['张三', '男', 25.0, 87.0],['小花', '女', 22.0, 95.0],['老王', '男', 30.0, 77.0]
]wb = xlwt.Workbook()
stu_sheet = wb.add_sheet('student')
list1 = ['name', 'gender', 'age', 'score']
data.insert(0, list1)for rows in range(len(data)):row_data = data[rows]for cols in range(len(row_data)):stu.sheet.write(rows, cols, row_data[cols])
wb.save('xxx.xls')
06xls文件设置单元格样式
import xlwt
wb = xlwt.Workbook()
sheet = wb.add_sheet('各种样式')
1. 字体相关样式
a. 创建样式对象
style1 = xlwt.XFStyle()
b. 创建字体对象
font1 = xlwt.Font()
c. 将字体对象关联到样式中
style1.font = font1
d. 设置字体相关属性
font1.name = '宋体' # 设置字体名称
font1.height = 20 * 20 # 设置字体大小
font1.colour_index = 10 # 设置字体颜色
font1.bold = True # 字体是否加粗
font1.italic = True # 字体是否倾斜
e. 写入数据的时候添加样式
sheet.write(1, 0, '苹果', style1)
2. 填充相关样式
a. 创建样式对象
style2 = xlwt.XFstyle()
b. 创建填充对象
pattern1 = xlwt.Pattern()
c. 将填充对象关联到样式对象中
style2.pattern = pattern1
d. 设置填充属性
pattern1.pattern = xlwt.Pattern.SOLID_PATTERN # 设置填充模式
pattern1.pattern_fore_colour = 52 # 设置填充颜色
e. 写入数据的时候添加样式
sheet.write(1, 1, '猕猴桃', style2)
3. 设置行高和列宽
a. 设置列宽度
sheet.col(0).width = 50 * 256
b. 设置行高
# 1) 允许设置某一行的高度
sheet.row(2).height_mismatch = True# 2) 设置指定行的高度
sheet.row(2).height = 40 * 60
4. 设置边框样式
a. 创建样式对象
style3 = xlwt.XFStyle()
b. 创建边框对象
borders1 = xlwt.Borders()
c. 设置样式对应的边框
style3.borders = borders1
d. 设置四个边的边框样式
borders1.top, borders1.top_colour = 5, 12
borders1.bottom, borders1.bottom_colour = 5, 12
borders1.left, borders1.left_colour = 5, 12
borders1.right, borders1.right_colour = 5, 12
e. 写入内容的时候设置样式
sheet.write(6, 0, '¥30.00', style3)
5. 设置对齐方式
a. 创建样式对象
style4 = xlwt.XFStyle()
b. 创建对齐对象
alignment1 = xlwt.Alignment()
c. 将对齐对象关联到样式对象中
style4.alignment = alignment1
水平上对齐 |
xlwt.Alignment.VERT_TOP
|
---|---|
水平居中 |
xlwt.Alignment.VERT_CENTER
|
水平下对齐 |
xlwt.Alignment.VERT_BOTTOM
|
垂直左对齐 |
xlwt.Alignment.HORZ_LEFT
|
---|---|
垂直居中 |
xlwt.Alignment.HORZ_CENTER
|
垂直右对齐 |
xlwt.Alignment.HORZ_RIGHT
|
rota | 旋转方向, 值为数字, 表示旋转的角度 |
---|
wrap | 自动换行 |
---|---|
shri | 自动缩进 |
d. 写入内容的时候设置样式
sheet.write(8, 0, '对齐方式', style4)
6. 保存文件
wb.save('xxx.xls')
07练习: 颜色对照表
import xlwt# 1. 准备数据
data = xlwt.Style.colour_map # 颜色值# 2. 准备工作表
wb = xlwt.Workbook()
sheet = wb.add_sheet('颜色对照表')# 3. 将数据写入到工作表中
# 1) 写入第一行数据
line1 = ['颜色', '颜色单词', '颜色值']style1 = xlwt.XFStyle()
# 设置字体样式
font1 = xlwt.Font()
style1.font = font1
font1.bold = True
font1.height = 16 * 16
font1.name = '黑体'# 设置对齐方式
alignment1 = xlwt.Alignment()
style1.alignment = alignment1
alignment1.vert = xlwt.Alignment.VERT_CENTER
alignment1.horz = xlwt.Alignment.HORZ_CENTER# 设置边框对象
border = xlwt.Borders()
style1.borders = border
border.left = border.right = border.top = border.bottom = 1
border.left_colour = border.right_colour = border.top_colour = border.bottom_colour = 8# 设置第一行的高度
sheet.row(0).height_mismatch = True
sheet.row(0).height = 10 * 60for col in range(len(line1)):# 设置每一列的宽度sheet.col(col).width = 20 * 256# 写入数据sheet.write(0, col, line1[col], style1)# 2) 写入颜色数据
# 准备相关样式
style2 = xlwt.XFStyle()
font2 = xlwt.Font()
style2.font = font2
font2.height = 13 * 13
style2.alignment = alignment1
style2.borders = border# 写入数据
row = 1
for key in data:# 第一列单元格的样式style3 = xlwt.XFStyle()style3.borders = borderpattern = xlwt.Pattern()style3.pattern = patternpattern.pattern = xlwt.Pattern.SOLID_PATTERNpattern.pattern_fore_colour = data[key]# 写入数据# print(key, data[key])sheet.write(row, 0, '', style3)sheet.write(row, 1, key, style2)sheet.write(row, 2, data[key], style2)# 设置行高sheet.row(row).height_mismatch = Truesheet.row(row).height = 10 * 60row += 1wb.save('files/颜色.xls')
day08-代码操作xls文件相关推荐
- 使用python处理wps表格_【使用Python操作XLS文件+wps中叫et+】 - #1
2009年12月08 - 有一次TE需要一个**信息列表,我用python导出了一个txt文件丢给了他们,结果他们很不悦哇,呵呵,因为他们要把几百项数据人肉到xls文件中作为列表输出,工作量太大,便要 ...
- python生成wps文件_使用Python操作XLS文件(wps中叫et)
一旦TE需要* *信息的列表,我导出一个txt文件与python和扔给他们,但是他们很不开心,哈哈,因为他们想要将数以百计的数据放到xls文件列表输出,工作数量太大,所以我问我出口成xls文件然后给他 ...
- 使用Python操作XLS文件(wps中叫et)
有一次TE需要一个**信息列表,我用python导出了一个txt文件丢给了他们,结果他们很不悦哇,呵呵,因为他们要把几百项数据人肉到xls文件中作为列表输出,工作量太大,便要求我导出成xls文件然后再 ...
- python操作xls文件_【转】使用Python操作XLS文件
我在网上找了下,发现至少有两种方法,第一种是直接操作excle的com库,当然python自带的lib里面已经给我们封装好了实现,直接使用就可以 了,win32com.client,这种方法甚至可以直 ...
- day08代码操纵xls文档
将字典内容打印为字符串并分行的方法 data = {'姓名': '赵军力', '英语': 69, '办公软件操作': 69, '电子商务': 63, '计算机基础': 76}#'英语: 69分\n办公 ...
- Python+Word:我已经使用“pip install docx”命令安装了扩展库docx,为什么无法运行书上的代码操作Word文件呢?
操作Word文件的扩展库名字叫python-docx,不是docx.另外要注意,扩展库python-docx只能操作Word 2007或更新版本的文档,不能处理Word 2003之前的文档.
- 使用代码操作Excel文件(easyExcel)
文章目录 1.Maven导入easyExcel包 2.easyExcel进行基本的写入 3. 编写代码:读和写 EasyExcel文档:https://www.yuque.com/easyexcel/ ...
- python 操作xls文件
首先pip install xlrd和pip install xlwt # -*- coding: utf-8 -*- import xlrd import xlwt from datetime im ...
- python操作xls文件,读取、写入、调整
1.读取excel import xlrd import xlwt from datetime import date,datetime# 打开文件 workbook = xlrd.open_work ...
最新文章
- shell脚本批量追踪ip路由走向
- 爬小说遇到编码问题 笔趣阁
- linux安装java的脚本吗,Linux安装JDK脚本
- (网页)中的简单的遮罩层
- python codefirst_Python code.co_consts方法代码示例
- Spring-Jpa : @MappedSuperclass的作用
- php模板引擎smarty,[PHP]模板引擎Smarty介绍
- PDE14 heat equation intuition
- P1113 杂务 拓扑排序
- word有空白段删不掉 解决办法
- WGS84与GCJ02经纬度坐标转换介绍
- python返回类型为anytype_python - Zeep的SOAP请求(Python) - 堆栈内存溢出
- 假设检验的基本原理和T检验
- macOS - 安装 swig 、PCRE
- 灵遁者:真正热爱生活的人,都知道这点
- 转载:js技巧收集(200多个)
- 三层交换机实现vlan间通信
- 2021秋招CVTE面经
- javaweb高并发量网站解决方案
- mysql odbc 驱动_mysql odbc驱动 32位 下载
热门文章
- 一剪梅(一片春愁待酒浇)宋(蒋捷)
- pytest数据驱动及conftest文件及装饰器使用
- matlab读取.dat数据
- 使用awk将gencode gtf注释文件转换为bed格式
- laravel 使用passport 生成token 报错 Replicating claims as headers is deprecated and will removed
- 麦满分免费早餐力挺高考考生
- MCMC、蒙特卡洛近似和Metropolis算法简介
- 利用鼠标滚轮事件让页面横向滚动
- GIS(地理信息系统/地理信息科学)职称评审三:中科院和人社部职称评审结果公示对比
- 家具防霉方案(适用于家具厂)