用Python操作Excel,实现班级成绩的统计
本次是在原来有一定格式的Excel文档中补充成绩。
- 安装的模块:xlwt 、 xlrd 、xlutils
xlrd的模块是只用读取xls文件,不能写文件,同理xlwt,只(新建写)不读已有的xls,
xlrd的用法:
- 打开文件:
data =xlrd.open_workbook(fime_path+'011.xls')
- 读取sheet:
table = data.sheet_by_index(0)
- 获取行数和列数:
nrows = table.nrows
ncols = table.ncols
- 读取单元格:
table.cell(i,j).value
xlwt的用法
- 初始化workbook对象:
wbk = xlwt.Workbook()
- 表单创建:
sheet = wbk.add_sheet('sheet 1')
- 写单元:
sheet.write(0,1,'test text')
- 保存:
wbk.save('test.xls')
到了讲怎么在原有的xls文档追加。这就使用到xlutils,xlutils(依赖于xlrd和xlwt)提供复制excel文件内容和修改文件的功能。其实际也只是在xlrd.Book和xlwt.Workbook之间建立了一个管道而已,如下图:
- 导包:
from xlutils.copy import copy
- 先用xlrd打开文件:
old_xls = xlrd.open_workbook(file_path2,formatting_info=True)
- 然后复制,使其转化成xlwt对象:
table_xlwt_b = copy(old_xls)
- 获取已有表单:
table_xlwt = table_xlwt_b.get_sheet(0)
- 修改单元格值:
table_xlwt.write(id_p,j,list[k]) #iid_p是行,j是列,list[k]是填充的值
- 保存:
table_xlwt_b.save(fime_path+"033.xls")
最后需要注意,打开原有xls文件,需要保留文档单元格的格式,需要在xlrd打开文件参数添加formatting_info=True,(默认是FALSE),同时,这参数只支持旧版的xls后缀的文件,不支持新版的xlsx后缀的文档,,如果打开xlsx会抛出异常,因此需要另存为xls文档
最后附上代码
#!coding:utf-8
import xlrd
import xlwt
import copy
from xlutils.copy import copy
fime_path="F:\\program_new\\PyCharm Community Edition 2018.2.3\\code_example\\xlwt_xlrd\\code\\"
old_xls = xlrd.open_workbook(fime_path+"022.xls", formatting_info=True)
def read_book():
data =xlrd.open_workbook(fime_path+'011.xls')
#导入表
table = data.sheet_by_index(0)
nrows = table.nrows
ncols = table.ncols
i=0
j=0
list_score = []
score = []
for i in range(1,nrows):
for j in range(6,ncols):
# print("%d%d"%(i,j))
score.append(table.cell(i,j).value)
list_score.append(score)
score=[]
return list_score
def id_position(student_id):
tabel_xlwt_ot = old_xls.sheet_by_index(0)
nrows = tabel_xlwt_ot.nrows
ncols = tabel_xlwt_ot.ncols
for i in range(3,nrows):
now_student_id = int(tabel_xlwt_ot.cell(i,0).value)
now_student_id=str(now_student_id)
if now_student_id==student_id:
return i
def write_book():
table_xlwt_b = copy(old_xls)
table_xlwt = table_xlwt_b.get_sheet(0)
list2=read_book()
print(len(list2),len(list2[1]))
for list in list2:
s_id=list[0]
print(list)
id_p = id_position(s_id)
if id_p is not None:
for (j,k) in zip(range(2,27,3),range(2,11)):
print(k,j)
table_xlwt.write(id_p,j,list[k])
else:
print(u"找不到该学号%s"%s_id)
table_xlwt_b.save(fime_path+"033.xls")
if __name__=="__main__":
write_book()
不用关闭文件,官方没有提供具体的方法关闭打开的xls文件。可以使用
book.release_resources()
释放内存
用Python操作Excel,实现班级成绩的统计的更多相关文章
- python学习笔记(八)python操作Excel
一.python操作excel,python操作excel使用xlrd.xlwt和xlutils模块,xlrd模块是读取excel的,xlwt模块是写excel的,xlutils是用来修改excel的 ...
- 用Python操作excel文档
使用Python第三方库 这一节我们学习如何使用Python去操作Excel文档.如果大家有人不知道Excel的话,那么建议先学一学office办公基础.这里想要操作Excel,必须安装一个Pytho ...
- python操作excel表格(xlrd/xlwt)
最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异,而且不太能满足需求,不过经过一番对源码的"研究&q ...
- Python操作Excel
一.系统性学习 对于操作Excel,需要Xlrd/xlwt这两个模块,下面推荐出系统性学习的网址: python操作Excel读写--使用xlrd 官方文档 Python 使用 Xlrd/xlwt 操 ...
- Python操作excel(xlrd和xlwt)
Python操作excel表格有很多支持的库,例如:xlrd.xlwt.openpyxl.win32com,下面介绍使用xlrd.xlwt和xlutils模块这三个库不需要其他的支持,在任何操作系统上 ...
- Python操作excel表格
用Python操作Excel在工作中还是挺常用的,因为毕竟不懂Excel是一个用户庞大的数据管理软件 注:本篇代码在Python3环境下运行 首先导入两个模块xlrd和xlwt,xlrd用来读取Exc ...
- Python 利用Python操作excel表格之openyxl介绍Part2
利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436) ## 绘图 c = LineChart() ...
- Python 利用Python操作excel表格之openyxl介绍Part1
利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436),免费获取以下性能监控工具(类似Nmon精简版) ...
- 【转】python操作excel表格(xlrd/xlwt)
[转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...
- Python 利用Python操作excel表格之xlwt介绍
利用Python操作excel表格之xlwt介绍 by:授客 QQ:1033553122 直接上代码 案例1 #!/usr/bin/env python # -*- coding:utf-8 ...
随机推荐
- C# 时间戳转换为时间格式
// 时间戳转为格式 public DateTime StampToDateTime(string timeStamp) { DateTime dateTimeStart = TimeZone.Cur ...
- MyBatis-11-一对多处理
11.一对多处理 比如:一个老师拥有多个学生! 对于老师而言,就是一对多的关系! 环境搭建 环境搭建,和刚才一样 实体类 @Data public class Teacher { private in ...
- CF827D Best Edge Weight[最小生成树+树剖/LCT/(可并堆/set启发式合并+倍增)]
题意:一张图求每条边边权最多改成多少可以让所有MST都包含这条边. 这题还是要考察Kruskal的贪心过程. 先跑一棵MST出来.然后考虑每条边. 如果他是非树边,要让他Kruskal的时候被选入,必 ...
- flutter 项目中打印原生安卓的log信息
因为项目的需要 在flutter 中调用安卓的方法 再用安卓的方法去调用c写的so包 方法 如果当前项目下面没有android stduio 自带的logcat 那就利用下面的方法 在安卓代码中引入 ...
- BZOJ 4012 [HNOI2015]开店 (区间修改 永久化标记 主席树)
讲得好啊 主席树区间修改了,每一次遇到整区间就打永久化标记(不下传,访问的时候沿路径上的标记算答案)然后returnreturnreturn,那么每修改一次只会访问到lognlognlogn个节点,再 ...
- Elastic-Job开发指南(转)
原文地址:http://dangdangdotcom.github.io/elastic-job/post/1.x/user_guide/ 开发指南 代码开发 作业类型 目前提供3种作业类型,分别是S ...
- HDU 6052 - To my boyfriend | 2017 Multi-University Training Contest 2
说实话不是很懂按题解怎么写,思路来源于 http://blog.csdn.net/calabash_boy/article/details/76272704?yyue=a21bo.50862.2018 ...
- 【Python之路】特别篇--抽屉新热榜
登陆与注册 注册功能: 流程: 填写用户名,邮箱,获取邮箱验证码,填入密码 单击<下一步>按钮,完成注册! 1.获取邮箱验证码(具体步骤分析): 1.利用ajax 往后台传入邮箱, 2.后 ...
- 诊断和修复Web测试记录器(Web Test Recorder)问题
http://www.cnblogs.com/oscarxie/articles/1045430.html Database LoadTest2010 script C:\Program Files ...
- JavaScript闭包应用场合——控制前端接口轮训
很多人都知道JavaScript的闭包,也知道大致是一个什么意思,但是对于闭包的应用场合不是很清楚 最近在改造项目的过程之中修改前端接口轮训方式的时候用到了闭包驱动setTimeout来实现一个类似定 ...