1. 项目背景与需求分析
每到月底,质量管理部门最头疼的就是制作各部门的质量考核表。传统手工制作方式需要从多个系统导出数据,再通过Excel进行复杂的公式计算和格式调整,整个过程通常需要2-3个工作日。更麻烦的是,不同部门的考核指标权重不同,模板格式也有差异,稍不注意就会出错。
这个自动化项目就是要解决这个痛点:通过程序自动抓取各系统的质量数据,按照预设规则进行计算,最终生成标准化的考核表。我们团队用Python+Excel实现了这个需求,现在每月只需10分钟就能完成过去几天的工作量。
2. 系统架构设计
2.1 数据源分析
质量考核涉及三类核心数据:
- 生产系统的不良品记录(MySQL数据库)
- ERP系统的工时统计(Oracle数据库)
- 质量检测系统的抽检报告(CSV文件)
2.2 技术选型
- 数据处理:Pandas库(处理异构数据源)
- 报表生成:OpenPyXL库(操作Excel模板)
- 定时任务:Windows任务计划程序
- 异常通知:SMTP邮件提醒
提示:选择OpenPyXL而不是xlwings的原因是它不需要安装Excel,更适合服务器环境
3. 核心实现细节
3.1 数据采集模块
python复制def fetch_production_data(start_date, end_date):
# 连接生产数据库获取不良品数据
query = f"SELECT * FROM defect_records WHERE date BETWEEN '{start_date}' AND '{end_date}'"
return pd.read_sql(query, engine)
def load_erp_data(month):
# 从ERP接口获取工时数据
erp_data = pd.read_excel(f"\\\\erp_server\\reports\\{month}_work_hours.xlsx")
return erp_data[['dept','employee_id','hours']]
3.2 考核计算逻辑
各部门考核公式不同,我们采用策略模式实现:
python复制class QualityCalculator:
def __init__(self, dept_type):
self.dept_type = dept_type
def calculate(self, raw_data):
if self.dept_type == "production":
return self._prod_calculation(raw_data)
elif self.dept_type == "logistics":
return self._logistics_calculation(raw_data)
# 其他部门计算方法...
def _prod_calculation(self, data):
# 生产部考核算法:不良率权重60% + 工时效率40%
defect_rate = data['defect_count'] / data['total_output']
hour_efficiency = data['standard_hours'] / data['actual_hours']
return 0.6*(1-defect_rate) + 0.4*hour_efficiency
4. 报表生成技巧
4.1 模板设计要点
- 使用Excel的"表格"功能(Ctrl+T)定义数据区域
- 预先设置好条件格式和数据验证
- 保留批注说明各字段含义
4.2 动态填充实现
python复制def fill_template(template_path, output_path, data):
wb = openpyxl.load_workbook(template_path)
ws = wb.active
# 填充部门基本信息
ws['B2'] = data['dept_name']
ws['D2'] = data['month'] + '月'
# 填充考核明细
for idx, item in enumerate(data['details'], start=5):
ws[f'A{idx}'] = item['index_name']
ws[f'B{idx}'] = item['target_value']
ws[f'C{idx}'] = item['actual_value']
ws[f'D{idx}'] = item['score']
wb.save(output_path)
5. 部署与优化
5.1 定时任务配置
- 每月25日18:00自动运行
- 执行流程:
- 数据采集(5分钟)
- 计算处理(2分钟)
- 生成报表(1分钟)
- 邮件发送(1分钟)
5.2 性能优化记录
| 优化点 | 效果 | 方法 |
|---|---|---|
| 数据库查询 | 时间从120s→8s | 添加created_time索引 |
| 内存占用 | 从2GB→500MB | 使用chunksize分块读取 |
| 文件IO | 生成时间从3m→40s | 改用xlsxwriter引擎 |
6. 常见问题处理
6.1 数据不一致
症状:ERP工时与生产系统记录对不上
解决方法:
- 增加数据校验步骤
- 记录差异明细供人工核对
- 设置阈值自动触发复核
6.2 格式错乱
症状:生成的Excel格式丢失
排查步骤:
- 检查模板是否被修改
- 验证OpenPyXL版本是否兼容
- 确认字体在服务器上可用
7. 扩展应用
这套框架经过简单改造还可以用于:
- 安全生产考核表生成
- 5S检查评分表自动汇总
- 员工绩效考核报表制作
关键是要抽象出通用的数据采集、计算和报表生成模块。我们后来开发了配置化界面,业务人员自己就能定义新的考核模板。