川小胖学python

博客园 首页 新随笔 联系 订阅 管理

手上有多个excel评分表,需要对所有人的评分进行统计,然后求出平均值。此功能除用到os模块外,还用到了以下模块:

  • xlrd,xlwt模块。   因为收到的表格全部为“xls”格式,如果用openpyxl的话,需要转格式,但这批表格直接用重命名的方式改格式会导致文件损坏,用pywin32改(见https://www.cnblogs.com/chuanxiaopang/p/14228389.html)又要等上几秒钟才转完,因此还是简单点,直接用xlrd和xlwt完成读写。
  • xlutils模块。   可以复制excel文件,并实现修改,本例处理H17:H43的数据。(注:我用xlwt写文件全是覆盖写入,不能修改,没明白哪里错了。

原文件如下:

需要统计所有得分栏的数据,然后取平均值。大体思路为xlrd读取所有数据,存到列表中,然后zip()压缩后得到各个对应项的列表,然后取平均值。复制源文件,将所得数据修改到对应位置。代码如下:

 1 import xlrd,os,xlwt
 2 from xlutils.copy import copy
 3 
 4 files = os.listdir(os.getcwd())  # 获取指定路径下的所有文件的文件名称
 5 list_xls = [file for file in files if file.split('.')[-1] in ['xls']] #获取所有xls格式的excel文件
 6 # print(list_xls)
 7 
 8 list_all_data=[]
 9 for f in list_xls:
10     workbook = xlrd.open_workbook(f)
11     data_sheet = workbook.sheets()[0]
12     list_data=[]
13     for row in range(16,43):
14         if data_sheet.cell(row, 7).value:
15             cell = data_sheet.cell(row, 7).value
16         else:
17             cell=0
18         list_data.append(cell)
19     list_all_data.append(list_data)
20 
21 l=[]
22 a=0
23 for i in range(len(list_all_data[0])):
24     _=[]
25     for j in list_all_data:
26         _.append(j[i])
27     l.append(round(sum(_)/len(list_all_data),2))
28 print(len(l),l)
29 # print(sum(l[0])/len(l[0]))
30 
31 #赋值
32 
33 workbook = xlrd.open_workbook(list_xls[0])
34 data_sheet = workbook.sheets()[0].name
35 print(type(list_xls[0]),list_xls[0],type(data_sheet),data_sheet)
36 old_excel = xlrd.open_workbook(list_xls[0],formatting_info=True)
37 # 将操作文件对象拷贝,变成可写的workbook对象
38 new_excel = copy(old_excel)
39 # 获得第一个sheet的对象
40 data_sheet1 = new_excel.get_sheet(data_sheet)
41 
42 #设置格式
43 alignment = xlwt.Alignment() # Create Alignment
44 # 格式为: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED
45 alignment.horz = xlwt.Alignment.HORZ_CENTER
46 # 格式为: VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED
47 alignment.vert = xlwt.Alignment.VERT_CENTER 
48 
49 
50 #边框
51 borders = xlwt.Borders() # Create Borders
52 #边框格式: NO_LINE, THIN, MEDIUM, DASHED, DOTTED, THICK, DOUBLE, HAIR, MEDIUM_DASHED, THIN_DASH_DOTTED, 
53 # MEDIUM_DASH_DOTTED, THIN_DASH_DOT_DOTTED, MEDIUM_DASH_DOT_DOTTED, SLANTED_MEDIUM_DASH_DOTTED, or 0x00 through 0x0D.
54 borders.left = xlwt.Borders.THIN 
55 borders.right = xlwt.Borders.THIN
56 borders.top = xlwt.Borders.THIN
57 borders.bottom = xlwt.Borders.THIN
58 borders.left_colour = 0x40
59 borders.right_colour = 0x40
60 borders.top_colour = 0x40
61 borders.bottom_colour = 0x40
62 style = xlwt.XFStyle() # 创建样式
63 style.borders = borders # 加载样式
64 style.alignment = alignment
65 
66 for i in range(16,43):
67     data_sheet1.write(i, 7, l[i-16],style) #写入数据
68 
69 new_excel.save('输出.xls')
求excel平均值

时间紧张,暂不做解析

posted on 2021-01-18 09:24  川小胖学Python  阅读(1042)  评论(0编辑  收藏  举报