# -*- 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处理电子表格相关推荐

  1. python爬虫框架排行榜-8个最高效的Python爬虫框架,你用过几个?

    小编收集了一些较为高效的Python爬虫框架.分享给大家. 1.Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系 ...

  2. python爬虫软件-8个最高效的Python爬虫框架,你用过几个?

    小编收集了一些较为高效的Python爬虫框架.分享给大家. 1.Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系 ...

  3. python怎么学最快-怎么样快速高效学习Python

    怎么样快速高效学习Python.最近学习Python语言的伙伴越来越多,但大多数人都没有太多时间用在学习上.那么怎么样学习Python时间短又高效的方法就很重要了.下面我把我学习python的方法简单 ...

  4. python 字典 列表 速度_高效使用Python字典的清单

    字典(dict)对象是 Python 最常用的数据结构,社区曾有人开玩笑地说:"Python企图用字典装载整个世界",字典在Python中的重要性不言而喻,这里整理了几个关于高效使 ...

  5. 8个高效的Python爬虫框架分享

    Python是一门优雅的编程语言,被广泛应用在Web开发.游戏开发.人工智能.云计算开发.大数据开发.数据分析.科学运算.爬虫.自动化运维.自动化测试等领域.Python在各领域的应用最方便的就是使用 ...

  6. 如何高效学Python?好用的爬虫工具又有哪些?

    作为当下最火的编程语言,Python 的受欢迎程度不用我多说.学好 Python ,不仅可以进阶资深 Python 工程师,去大厂,还能转型数据分析.人工智能等行业. 但与此同时,我也经常在后台看到一 ...

  7. python爬虫-8个最高效的Python爬虫框架,你用过几个?

    小编收集了一些较为高效的Python爬虫框架.分享给大家. 1.Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 可以应用在包括数据挖掘,信息处理或存储历史数据等一系 ...

  8. python requests 异步调用_构建高效的python requests长连接池详解

    前文: 最近在搞全网的CDN刷新系统,在性能调优时遇到了requests长连接的一个问题,以前关注过长连接太多造成浪费的问题,但因为系统都是分布式扩展的,针对这种各别问题就懒得改动了. 现在开发的缓存 ...

  9. python爬虫脚本ios_【苹果IP代理】 8大高效的Python爬虫框架,你用过几个?

    [苹果 IP 代理] 8 大高效的 Python 爬虫框架, 你用过几个? [苹果 IP 代理]大数据时代下,数据采集推动着数据分析, 数据分析推动发展. 但是在这个过程中会出现很多问题. 拿最简 单 ...

最新文章

  1. 1-1 分配内存资源给容器和POD
  2. PyCharm的隐藏技巧(Tips)-快捷键等积累
  3. httpd-2.4编译安装基本步骤
  4. Mysql之删除表中数据_DELETE FROM
  5. Linux进行设置环境变量
  6. API网关—Spring Cloud Zuul
  7. 三只松鼠现“两只老鼠”:卖废纸箱发家致富??
  8. 信息安全技术网络安全等级保护定级指南_报业网络安全等级保护定级参考指南V2.0发布...
  9. Nginx配置HTTPS和HTTP
  10. 安装linux取消硬盘密码设置,linux下硬盘加密方法
  11. 背景图页面缩小会变形_HTML中怎么让背景图片跟着浏览器窗口变大变小?
  12. 优锘科技:渲染引擎T3D:WebGL端数字孪生应用最优解
  13. 多图识字 | 自动识别提取图片文字,微信小程序
  14. 电信增值短信平台模块清单
  15. 如何修炼成某一领域的高手?
  16. 【开源】一款PyQT+Pyserial开发的串口调试工具
  17. 数字藏品系统开发,APP小程序成品源码搭建开发
  18. C语言中 sqrt(); 函数的最全用法总结,最全!!!
  19. 计算机课件制作教程ppt,电脑制作ppt详细步骤_新手制作ppt详细步骤图文教程
  20. vue 格式化数值方法

热门文章

  1. 一款使用JavaScript实现的篮球投篮游戏源代码,在浏览器里就能玩的篮球小游戏代码
  2. C++ 虚函数详解(虚函数表、vfptr)——带虚函数表的内存分布图
  3. 2022年电赛E题声源定位跟踪系统
  4. Loadrunner中几个超时函数的用法
  5. 教你如何暴力破解wifii密码
  6. 编译原理 C-Minus词法分析(FLEX)
  7. 通过subquery_planner查看rtable是些什么东西
  8. python 捕捉 ctrl+c 异常方法, os._exit() 和 sys.exit() 的用法和区别
  9. django改变用户头像
  10. 7-14 电话聊天狂人(25 分)