具体要求是:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再生成随机数作为学生的考试成绩。
首先要用到的数据库有:xlwt,xlrd,random这三个数据库。
命令如下:
import xlwt
import xlrd
import random
现有一份表格内容如下图:
现在我们需要提取这其中的B1—C14。
1
2
3
4
5
6
7
8
9
|
(提示:在对这份电子表格进行操作的时候,要使用到这个电子表格的地址,即表格的储存位置。)
sheet = excel.sheets()[ 0 ] #在原表1中提取第一页中的数据。对excel进行处理时,行列页都是从0开始进行计算
wb = xlwt.Workbook() #创立一个新的excel表格
ws = wb.add_sheet( '成绩单' ) #第一页命名为成绩单
(如果要进行多页操作,要将学号姓名放到两页excel表格中的话可以如下操作:
ws1 = wb.add_sheet( '1班成绩单' )
ws2 = wb.add_sheet( '2班成绩单' )
)
|
创建两个list:
1
2
3
4
5
6
|
a = []
b = []
(这两个 list 是用来临时存放学号与姓名的)
for i in range ( 1 , 14 ): #在大二下学期15级成绩汇总.xlsx表中提取出姓名与学号
a .append(sheet.row_values(i, 1 , 2 )) #提取第i行的第1个数,即这个命令抽取的是表中的学号列
b .append(sheet.row_values(i, 2 , 3 )) #提取第i行的第2个数,即这个命令抽取的是表中的姓名列
|
在此特比注意:excel中行与列均是从0开始计算的,即表中第1行第1列在进行处理运行时为第0行第0列,表中第2行第2列在进行处理运行时为第1行第1列。表中sheet也是从0开始算起。
解释一下: a .append(sheet.row_values(i,1,2))在经过几次错误后我发现,i是指第i行, 1,2 这两个是一段范围。即取的是第1个值,按照上面注意的说,就是表中第二个框格的值。
如果对此有疑问可以试一下将 1,2 修改一个值进行尝试。
1
2
3
|
for n in range ( 13 ): #将学号与姓名写入新建的表格中,并写在第1页,人数为13人。
ws.write(n, 0 ,a[n][ 0 ])
ws.write(n, 1 ,b[n][ 0 ])
|
提醒:为什么这里要用a[n][0]而不是a[n]?这个是我自己水平有限制的原因。因为在提取表中数据放入a,b两个list中他们的形式是:a=[[111],[112],[113]……]的形式,对于这一点的解决方法我还没想出来,因此只能靠a[n][0]这样的形式来解决。因为在写入新的表格过程中不能将list整个放入框格中,只能放入文本或者其他框格允许的格式。如果你们有什么比较好的方法可以提出来我们一起交流学习,感激不尽。
1
2
3
4
5
6
7
8
9
|
for q in range ( 13 ): #对1班所有人的成绩进行随机抽取数据
ran = random.randint( 60 , 91 )
if ran< = 70 :
ws1.write(q, 2 , '及格({0})' . format (ran))
if ran> 70 and ran< = 80 :
ws1.write(q, 2 , '中等({0})' . format (ran))
if ran> 80 and ran< = 90 :
ws1.write(q, 2 , '良好({0})' . format (ran))
wb.save( '15资环1,2班地理信息系统实习成绩.xls' ) #将新建的表格保存为'15资环1,2班地理信息系统实习成绩.xls'文件
|
以下代码是由两个班的数据进行运算。
原来的表格为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
import xlwt #引入xlwt数据库用来将数据写入excel文档中
import xlrd #引入xlrd数据库用来从excel中读取数据
import random #引入random数据库给出随机数
excel = xlrd.open_workbook( 'G:\python\新建文件夹\表1.xlsx' ) #从一个已有学号与姓名的excel表格中提取出对应的学号和姓名
sheet = excel.sheets()[ 0 ]
wb = xlwt.Workbook() #创立一个新的excel表格
ws1 = wb.add_sheet( '1班成绩单' ) #第一页命名为1班成绩单
ws2 = wb.add_sheet( '2班成绩单' ) #第一页命名为2班成绩单
a1 = [] #表1中的学号列
a2 = [] #表2中的学号列
b1 = [] #表1中的姓名列
b2 = [] #表2中的姓名列
for i in range ( 1 , 14 ): #表1.xlsx表中提取出1班的姓名与学号
a1.append(sheet.row_values(i, 1 , 2 ))
b1.append(sheet.row_values(i, 2 , 3 ))
for j in range ( 14 , 33 ): #在表1.xlsx表中提取出1班的姓名与学号
a2.append(sheet.row_values(j, 1 , 2 ))
b2.append(sheet.row_values(j, 2 , 3 ))
for n in range ( 13 ): #将1班学号与姓名写入新建的表格中,并写在第1页.1班人数为13人
ws1.write(n, 0 ,a1[n][ 0 ])
ws1.write(n, 1 ,b1[n][ 0 ])
for m in range ( 19 ): #将2班学号与姓名写入新建的表格中,并写在第2页.2班人数为19人
ws2.write(m, 0 ,a2[m][ 0 ])
ws2.write(m, 1 ,b2[m][ 0 ])
for q in range ( 13 ): #对1班所有人的成绩进行随机抽取数据
ran = random.randint( 60 , 91 ) #分数为60-90之间
if ran< = 70 :
ws1.write(q, 2 , '及格({0})' . format (ran)) #以下表示在各分数段的等级
if ran> 70 and ran< = 80 :
ws1.write(q, 2 , '中等({0})' . format (ran))
if ran> 80 and ran< = 90 :
ws1.write(q, 2 , '良好({0})' . format (ran))
for d in range ( 19 ): #对2班所有人的成绩进行随机抽取数据
ran = random.randint( 60 , 91 )
if ran< = 70 :
ws2.write(d, 2 , '及格({0})' . format (ran))
if ran> 70 and ran< = 80 :
ws2.write(d, 2 , '中等({0})' . format (ran))
if ran> 80 and ran< = 90 :
ws2.write(d, 2 , '良好({0})' . format (ran))
|
wb.save('15资环1,2班地理信息系统实习成绩.xls') #将新建的表格保存为'15资环1,2班地理信息系统实习成绩.xls'文件
结果如下:
总结
以上所述是小编给大家介绍的基于python实现在excel中读取与生成随机数写入excel中,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:http://www.cnblogs.com/jie-chen/p/8185726.html?utm_source=tuicool&utm_medium=referral