高效应用Python处理电子表格
# -*- coding: utf-8 -*-
"""
Created on Sat Mar 7 10:23:05 2020
功能说明:(已完成)
1.从子表中收集日得分和日期汇总至'总体情况'表格中
2.'总体情况'未达标项目标红字体(达标设置为95)、统计错误数目、不达标项数、已达标项目数
3.日报标识不达标项目、统计错误项目
@author: xixi
"""
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from openpyxl import load_workbook
from openpyxl.styles.colors import RED,BLACK
from openpyxl.drawing.image import Image
#定义全局变量
fill_red=PatternFill("solid",fgColor=colors.RED)
REDFont=Font(color=RED)
BLACKFont=Font(color=BLACK)
img = 'test.png'
# 设置绘图风格
plt. style.use("ggplot")
# 设置中文编码和符号的正常显示
plt.rcParams["font.sans-serif"] = "KaiTi"
plt.rcParams["axes.unicode_minus"] = False
def restart_count(file_name):
wb = load_workbook(file_name,data_only=True)
all_sheetsname = wb.sheetnames
print('原表格数量:%d个\n'%len(all_sheetsname)+'原表格名称:'+str(all_sheetsname))
#新建总表,用于统计周期得分情况
csheet='总体情况'
while(all_sheetsname[0]==csheet):
wb.remove(wb['总体情况'])
print('删除<'+str(csheet)+'>成功!')
break
wb.save(file_name)#一定要保存,不然白做!
def color_number(sheetcolor):
rows=sheetcolor.max_row
for i in range(1,rows):
number=round(sheetcolor.cell(i+1,5).value,2)#强制转换数值
if number<95:#设置判断阈值95
sheetcolor.cell(i+1,5).font=REDFont#不达标项目字体变红色
def find_dailyIndex_in_xlsx(file_name):
restart_count(file_name)
wb = load_workbook(file_name,data_only=True)
all_sheets= wb.sheetnames
print('日指标统计天数:%d天\n'%len(all_sheets)+'表格名称:'+str(all_sheets))
#新建总表,用于统计周期得分情况
csheetname='总体情况'
ws=wb.create_sheet(csheetname,0)
ws['A1']='序号'
ws['B1']='统计日期'
ws['C1']='指标满分'
ws['D1']='指标得分'
ws['E1']='百分制得分'
ws['F1']='环比'
ws['G1']='100%指标数'
ws['H1']='问题指标数'
ws['I1']='指标统计错误数'
for i in range(len(all_sheets)):
#获取表格信息
sheet = all_sheets[i]
print ('表格%d: ' %i+ str(sheet)+': max_row: ' + str(wb[sheet].max_row) + ' max_column: ' + str(wb[sheet].max_column))
#获取指标日期和得分信息
dateIndex=wb[sheet]['B27'].value#指标日期-其他获取方式dateIndex=wb[sheet].cell(27,2).value
HezhouIndex=wb[sheet]['D26'].value#指标得分
print('指标统计日期:'+str(dateIndex)+' 指标得分:%.2f'%HezhouIndex)
##统计日报不达标指标项目标红
sctcolor=wb[sheet]
red_count=0
black_count=0
err_count=0
for j in range(1,25):
sct_number=round(sctcolor.cell(j+1,4).value,2)#强制转换数值
target_number=round(sctcolor.cell(j+1,3).value,2)#强制转换数值
if sct_number<target_number:#设置判断阈值target_number
sctcolor.cell(j+1,4).font=REDFont#不达标项目字体变红色
red_count+=1
elif sct_number==target_number:
sctcolor.cell(j+1,4).font=BLACKFont#达标项目字体变黑色
black_count=black_count+1
else:
sctcolor.cell(j+1,4).font=BLACKFont#达标项目字体变黑色
sctcolor.cell(j+1,4).fill=fill_red#指标统计错误项目背景填充红色
err_count=err_count+1
#汇总得分情况至总表
ws.cell(i+2,1).value=i+1
ws.cell(i+2,2).value=dateIndex
ws.cell(i+2,3).value=wb[sheet]['C26'].value
ws.cell(i+2,4).value=float("%.2f"%HezhouIndex)#转换2位小数,其他方式:round(HezhouIndex,2)
sct=ws.cell(i+2,4).value*100/ws.cell(i+2,3).value#计算百分制得分
ws.cell(i+2,5).value=float("%.2f"%sct)#format(ws.cell(i+2,3).value*100/ws.cell(i+2,2).value,'.4')
if i==0:
ws.cell(i+2,6).value=''
else:
ws.cell(i+2,6).value=format((ws.cell(i+2,5).value-ws.cell(i+1,5).value)*100/ws.cell(i+1,5).value,'.3')
ws.cell(i+2,8).value=red_count
ws.cell(i+2,7).value=black_count-err_count
ws.cell(i+2,9).value=err_count
while(err_count!=0):
ws.cell(i+2,9).fill=fill_red
break
color_number(ws)#标识不达标项
wb.save(file_name)#一定要保存,不然白做!
def draw_Index(file_name):
# 设置图框的大小
#fig = plt.figure(figsize = (1000,600))
#获取xlsx中的sheet的辅助列0,x轴数据列1,y轴数据列4
sct=pd.read_excel(file_name,sheet_name='总体情况',usecols=[0,1,4])
#print(sct)
#绘制坐标图x=辅助列,y=y轴数据列
sct.plot(x=sct.columns[0],y=sct.columns[2],
linestyle = '-', # 折线类型
linewidth = 2, # 折线宽度
color = 'steelblue', # 折线颜色
marker = 'o', # 点的形状
markersize = 6, # 点的大小
markeredgecolor='black', # 点的边框色
markerfacecolor='brown')
#替换x轴刻度和标识
x = np.array(sct[sct.columns[0]])
y = np.array(sct[sct.columns[2]])
x_t = np.array(sct[sct.columns[1]])
plt.xlabel('')
plt.xticks(x,x_t)
# print(x[len(x)-1])
#绘制指标线95
target=95
plt.axhline(y=target,ls=":",c="red")
plt.text(x[len(x)-1],target,'考核目标值'+str(target),color='r',verticalalignment="baseline",
horizontalalignment="right")
# 添加标题和坐标轴标签
plt.ylim(80,100)#设置Y轴取值范围
plt.title('3月实用化指标趋势')
plt.xlabel('统计日期')
plt.ylabel('日指标得分')
# 剔除图框上边界和右边界的刻度
plt.tick_params(top = 'off', right = 'off')
#在折线点标识每日得分
for a,b in zip(x,y):
plt.annotate('(%s)'%b,xy=(a,b),xytext=(-10,10),
textcoords='offset points')
# 插入图形
wb = load_workbook(file_name)
plt.savefig(img)
Image_all=Image(img)
ws = wb['总体情况']
ws.add_image(Image_all,'J1')
wb.save(file_name)#一定要保存,不然白做!
# 主程序
file_name='test003.xlsx'
find_dailyIndex_in_xlsx(file_name)
draw_Index(file_name)
运行效果图:
高效应用Python处理电子表格相关推荐
- python爬虫框架排行榜-8个最高效的Python爬虫框架,你用过几个?
小编收集了一些较为高效的Python爬虫框架.分享给大家. 1.Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系 ...
- python爬虫软件-8个最高效的Python爬虫框架,你用过几个?
小编收集了一些较为高效的Python爬虫框架.分享给大家. 1.Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系 ...
- python怎么学最快-怎么样快速高效学习Python
怎么样快速高效学习Python.最近学习Python语言的伙伴越来越多,但大多数人都没有太多时间用在学习上.那么怎么样学习Python时间短又高效的方法就很重要了.下面我把我学习python的方法简单 ...
- python 字典 列表 速度_高效使用Python字典的清单
字典(dict)对象是 Python 最常用的数据结构,社区曾有人开玩笑地说:"Python企图用字典装载整个世界",字典在Python中的重要性不言而喻,这里整理了几个关于高效使 ...
- 8个高效的Python爬虫框架分享
Python是一门优雅的编程语言,被广泛应用在Web开发.游戏开发.人工智能.云计算开发.大数据开发.数据分析.科学运算.爬虫.自动化运维.自动化测试等领域.Python在各领域的应用最方便的就是使用 ...
- 如何高效学Python?好用的爬虫工具又有哪些?
作为当下最火的编程语言,Python 的受欢迎程度不用我多说.学好 Python ,不仅可以进阶资深 Python 工程师,去大厂,还能转型数据分析.人工智能等行业. 但与此同时,我也经常在后台看到一 ...
- python爬虫-8个最高效的Python爬虫框架,你用过几个?
小编收集了一些较为高效的Python爬虫框架.分享给大家. 1.Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系 ...
- python requests 异步调用_构建高效的python requests长连接池详解
前文: 最近在搞全网的CDN刷新系统,在性能调优时遇到了requests长连接的一个问题,以前关注过长连接太多造成浪费的问题,但因为系统都是分布式扩展的,针对这种各别问题就懒得改动了. 现在开发的缓存 ...
- python爬虫脚本ios_【苹果IP代理】 8大高效的Python爬虫框架,你用过几个?
[苹果 IP 代理] 8 大高效的 Python 爬虫框架, 你用过几个? [苹果 IP 代理]大数据时代下,数据采集推动着数据分析, 数据分析推动发展. 但是在这个过程中会出现很多问题. 拿最简 单 ...
最新文章
- 1-1 分配内存资源给容器和POD
- PyCharm的隐藏技巧(Tips)-快捷键等积累
- httpd-2.4编译安装基本步骤
- Mysql之删除表中数据_DELETE FROM
- Linux进行设置环境变量
- API网关—Spring Cloud Zuul
- 三只松鼠现“两只老鼠”:卖废纸箱发家致富??
- 信息安全技术网络安全等级保护定级指南_报业网络安全等级保护定级参考指南V2.0发布...
- Nginx配置HTTPS和HTTP
- 安装linux取消硬盘密码设置,linux下硬盘加密方法
- 背景图页面缩小会变形_HTML中怎么让背景图片跟着浏览器窗口变大变小?
- 优锘科技:渲染引擎T3D:WebGL端数字孪生应用最优解
- 多图识字 | 自动识别提取图片文字,微信小程序
- 电信增值短信平台模块清单
- 如何修炼成某一领域的高手?
- 【开源】一款PyQT+Pyserial开发的串口调试工具
- 数字藏品系统开发,APP小程序成品源码搭建开发
- C语言中 sqrt(); 函数的最全用法总结,最全!!!
- 计算机课件制作教程ppt,电脑制作ppt详细步骤_新手制作ppt详细步骤图文教程
- vue 格式化数值方法
热门文章
- 一款使用JavaScript实现的篮球投篮游戏源代码,在浏览器里就能玩的篮球小游戏代码
- C++ 虚函数详解(虚函数表、vfptr)——带虚函数表的内存分布图
- 2022年电赛E题声源定位跟踪系统
- Loadrunner中几个超时函数的用法
- 教你如何暴力破解wifii密码
- 编译原理 C-Minus词法分析(FLEX)
- 通过subquery_planner查看rtable是些什么东西
- python 捕捉 ctrl+c 异常方法, os._exit() 和 sys.exit() 的用法和区别
- django改变用户头像
- 7-14 电话聊天狂人(25 分)