用了三百多行代码帮其他部门把他们已有的一套比较费时的报表做了自动化,包括批注、字体和样式都一一还原,原本需要好几个小时的工作用代码两分钟就跑完了,提效效果明显 666

import openpyxl, os, re
import pandas as pd
from datetime import datetime
from win32com.client import DispatchEx
from openpyxl.utils import get_column_letter
from openpyxl.styles import *
from openpyxl.comments import Comment开始时间 = datetime.now()
print("开始时间:", 开始时间.strftime('%Y-%m-%d %H:%M:%S'))# 注意:openpyxl 模块不支持.xls格式的表格文件,需要重新保存为.xlsx格式的表格才行。# 获取文件夹下所有文件,并对文件内容进行拼接
def get_data(file_dir):result = pd.DataFrame()for root, dirs, files in os.walk(file_dir):  # 获取所有文件for file in files:  # 遍历所有文件名result = pd.concat([result, pd.read_excel(os.path.join(root,file))], axis = 0, ignore_index = True)  # 拼接绝对路径并放入列表return resultdef Autowidth(workbook):  # 自动调整列宽# 字体格式c3_font = Font(name='微软雅黑', size=11)  # 微软雅黑11# 设置边框{'medium' 中粗; 'thin'  细;  'thick'  粗;  'dashed'  虚线;  'dotted'  点线}border = Border(left=Side(style='thin'), top=Side(style='thin'), right=Side(style='thin'),bottom=Side(style='thin'))  # 给单元格设置细边框alignment = Alignment(vertical="center")  # 设置垂直居中darkred_fill = PatternFill(fill_type='solid', fgColor='B22222')  # 单元格填充深红色c4_font = Font(name='微软雅黑', size=11, bold=True, color='ffffff')  # 微软雅黑11加粗白色,结合深红色单元格使用# 使用win32com自动打开文件并保存一下就好了xlApp = DispatchEx("Excel.Application")xlApp.Visible = FalsexlBook = xlApp.Workbooks.Open(workbook)xlBook.Save()xlBook.Close()bk = openpyxl.load_workbook(workbook, data_only = True)for sht in bk:# 设置一个字典用于保存列宽数据dims = {}# 遍历表格数据,获取自适应列宽数据for row in sht.rows:for cell in row:if cell.value:# 遍历整个表格,把该列所有的单元格文本进行长度对比,找出最长的单元格# 在对比单元格文本时需要将中文字符识别为1.7个长度,英文字符识别为1个,这里只需要将文本长度直接加上中文字符数量即可.# re.findall('([\u4e00-\u9fa5])', cell.value)能够识别大部分中文字符cell_len = 0.7 * len(re.findall('([\u4e00-\u9fa5])', str(cell.value))) + len(str(cell.value))# print(cell.value, len(str(cell.value)), cell_len)dims[cell.column] = max((dims.get(cell.column, 0), cell_len))for col, value in dims.items():# 设置列宽,get_column_letter用于获取数字列号对应的字母列号,最后值+2是用来调整最终效果的。sht.column_dimensions[get_column_letter(col)].width = min(40, value + 5)bk['未完结数据源'].views.sheetView[0].tabSelected = Falsebk.save(workbook)def colformat(sht, colnum, format):  # 调整列数据格式for i in range(2, sht.max_row + 1):sht.cell(i, colnum).number_format = formatdef colorrgb(r, g, b):  # RGB3组数字转换成6位16进制字符colorlist = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']result = ''for n in [r, g, b]:result = result + colorlist[int(n/16)]result = result + colorlist[n % 16]return result# 参数设置
结束日期填充 = '2022-11-20'  # 数据截止日期
结束时间填充 = '18:00:00'  # 统计截止时间
统计周 = [36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47]  # 统计周
统计日批注 = ['0904', '0911', '0918', '0925', '1002', '1009', '1016', '1023', '1030', '1106', '1113', '1120'] # 每周最后一天对应的日期,添加批注用,需与统计周一一对应
统计周批注 = ['0829-0904', '0905-0911', '0912-0918', '0919-0925', '0926-1002', '1003-1009', '1010-1016', '1017-1023', '1024-1030', '1031-1106', '1107-1113', '1114-1120']  # 每周对应的日期范围,添加批注用,需与统计周一一对应
统计月 = [8, 9, 10, 11]  # 统计月
每月周数 = [0, 4, 5, 3] # 统计月对应周数,合并单元格用,需与统计月一一对应
统计月批注 = ['0801-0831', '0901-0930', '1001-1031', '1101-1120']  # 每月对应的日期范围,添加批注用,需与统计月一一对应
批注作者 = '江异'  # 批注作者,添加批注用
批注框高, 批注框宽 = 60, 240  # 批注边框,在这里没有效果,是无效参数# 源数据路径
file_dir = 'D:/0开思/1履约中心/工单分析/源数据'
data_standard = pd.read_excel('D:/0开思/1履约中心/工单分析/工单问题类型及处理时效.xlsx', sheet_name = '工单问题类型及处理时长', skiprows = (0), usecols = (2, 6, 7, 8))# 输出文件路径
file_name = 'D:/0开思/1履约中心/工单分析/超时工单看板公示 ' + 结束日期填充.split('-',1)[1].replace('-','.') + '.xlsx'# 源数据清洗
data = get_data(file_dir)
data = data.drop_duplicates(subset = ['工单号'])
data = data.dropna(subset = ['创建日期'])
data = data[(data.问题类型 != '报错价(一次报价)') & (data.问题类型 != '报错价(二次报价)') & (data.问题类型 != '报价不规范') & (data.处理人职位 != '业务售前客服') & (data.处理人职位 != '测试工程师')]
data['结束日期'].fillna(结束日期填充, inplace = True)
data['结束时间'].fillna(结束时间填充, inplace = True)
data['紧急程度'].fillna('三级', inplace = True)
data['当前处理人'].fillna('', inplace = True)
data['处理人职位'].fillna('', inplace = True)
data['创建时间'] = data.apply(lambda x: datetime.strptime(x['创建日期'] + ' ' + x['创建时间'],'%Y-%m-%d %H:%M:%S'), axis = 1)
data['创建日期'] = data.apply(lambda x: datetime.strptime(x['创建日期'],'%Y-%m-%d'), axis 

openpyxl应用实例——根据导出的源数据自动生成工单看板相关推荐

  1. java自定义表单_JSP实现用于自动生成表单标签html代码的自定义表单标签

    本文实例讲述了JSP实现用于自动生成表单标签HTML代码的自定义表单标签.分享给大家供大家参考.具体如下: 这个是自己写的一个简单的JSP表单标签,用于自动生成checkBox,select,radi ...

  2. 表单在线生成 html代码,JSP实现用于自动生成表单标签html代码的自定义表单标签...

    本文实例讲述了JSP实现用于自动生成表单标签html代码的自定义表单标签.分享给大家供大家参考.具体如下: 这个是自己写的一个简单的JSP表单标签,用于自动生成checkbox,select,radi ...

  3. java自动下发工单源码_PESCMS Ticket开源客服工单系统 v1.3.5

    PESMCS Ticket(下称PT)是一款基于GPLv2协议发布的开源客服工单系统.除了传统的站内工单提交模式,我们以全新的设计理念,基于Javascript语言开发的跨域工单提交.实现在任何系统. ...

  4. TR单据自动生成TO单并确认

    TR单据自动生成TO单并确认 LS_LTBK-LGNUM = GS_OUTPUT-LGNUM.               "仓库号       LS_LTBK-TBNUM = GS_OUT ...

  5. ITSM常见问题之:自动指派工单给对应的技术员的三种简单方法

    假设在某个月末,发工资的员工无法登录到工资支付应用程序,为了解决这个问题,他向IT帮助台发送了一封电子邮件,即创建了一个工单.不巧的是,这时服务台协调员并不在公司,于是工单一直处于未指派状态,直到服务 ...

  6. sql server小型案例-自动生成销售单号的触发器

    sql server实现自动生成销售单号的触发器 1.有关系统 最近在做信息系统课程设计的小项目,我们团队所做的是一个简单的自动贩卖机销售管理系统,其中我负责的部分是销售管理,其中需要实现的一个功能是 ...

  7. 客户下单,自动分单,生成工单 发送短信 演...

    1. 启动相关系统  客户下单 bos_fore 前端系统 将订单数据发送到服务器 bos_management 自动分单,CRM 地址库完全匹配 crm_management 生成工单,发送短信 a ...

  8. 使用git命令导出项目_git自动生成changelog及项目版本管理

    版本管理 1.version类别介绍 每个npm包中都有一个package.json文件,如果要发包的话,package.json中的version就是版本号了. version字段结构为:'0.0. ...

  9. 读取excel日期 c++_实例9:用Python自动生成Excel档每日出货清单

    公司研发部门每年都需要向税务局提交一份出货清单,以申报研发费用.要求按日期来汇总,每日只要有出货,就需要一份出货单.出货总表包含数百条出货记录.假设一年有200天都出过货,那按照常规的方法,需要从总表 ...

  10. powerdesigner导出sql时自动生成注释

    1. 选择Tools -> Excute commands -> Edit/Run Script,打开窗口,添加以下脚本并运行 '***************************** ...

最新文章

  1. 从互联网大厂裸辞 500 天后,我发生哪些变化?
  2. UINavigationItem的titleView的frame问题
  3. Linux下快速静态编译Qt以及Qt动态/静态版本共存
  4. FGPA异步信号问题
  5. python动态验证码_Python 模拟生成动态产生验证码图片的方法
  6. 95-240-052-原理-State-MemoryStateBackend
  7. 设计sample语言的语法_Verilog语法之〇:Verilog HDL简介
  8. css怎么设置鼠标手势?
  9. python--贝壳租房爬虫及数据可视化
  10. css3实现动画的三种方式
  11. L1-039古风排版
  12. for(in/of)/forEarch的区别和使用
  13. 2009个人年度总结报告
  14. 共享计算机添加打印机后无法打印机驱动,打印机无法打印原因?打印机设置共享的方法...
  15. 安装增强功能时出错:未能加载虚拟光驱 VBoxsGuestAdditions.iso到虚拟电脑
  16. 在IntelliJ IDEA中创建和运行java/scala/spark程序
  17. 洛谷· [AHOI2008]紧急集合 / 聚会
  18. visio 2007:方向键无法移动图像解决方法
  19. 发现一款感觉很不错的学英语软件:Rosseta Stone
  20. 写给Java开发看的 Docker 干货(零基础部署Nginx MySQL SpringBoot)

热门文章

  1. 班委竞选(离散数学课后习题 p45 29)
  2. unity 双摄像机---其中一个摄像机看不到UI问题解决
  3. 以下我们介绍巴菲特的投资理念——— 赢家暗语:5+12+8+2
  4. 关于google c++ style guide的个人理解 - 命名规则
  5. python数据库迁移命令_django数据库迁移sqlmigrate调试
  6. 安捷伦86146B光学分析仪
  7. 获取当天00:00:00时间的方法
  8. sudo 出现unable to resolve host 解决方法
  9. 文件压缩下载的时候 边压缩边下载
  10. 已知 A={1,{∅}},求AXP(A)。