档案制度建设考核表自动化生成与评分实操指南

一、环境准备与依赖安装

在开始构建档案制度建设考核表系统之前,需要确保本地运行环境已配置妥当。本方案基于Python 3.8及以上版本开发,利用其强大的数据处理库实现Excel的自动化生成与逻辑计算。请打开终端或命令行工具,依次执行以下命令安装核心依赖库。

```bash pip install pandas openpyxl xlsxwriter ```

依赖库说明:

  • pandas:用于处理考核指标的数据结构化与DataFrame转换。
  • openpyxl:用于读写Excel (.xlsx) 文件,支持复杂的样式设置。
  • xlsxwriter:用于向Excel文件中写入公式、图表及条件格式。

二、考核指标体系结构设计

为了实现考核表的自动化生成,首先需要将档案制度建设的考核标准进行结构化定义。我们将考核维度划分为“组织与管理”、“制度建设”、“业务管理”及“信息化建设”四个一级指标。以下是一个完整的JSON格式配置文件内容,请将其保存为assessment_config.json,该文件将作为数据源驱动后续的代码逻辑。

```json { "meta": { "title": "年度档案制度建设考核表", "version": "V2.0", "total_score": 100 }, "dimensions": [ { "id": "D01", "name": "组织与管理", "weight": 20, "items": [ {"seq": "1.1", "content": "档案工作纳入单位年度工作计划", "standard": "有相关文件或会议记录", "score": 5, "type": "check"}, {"seq": "1.2", "content": "建立档案工作领导责任制", "standard": "明确分管领导及职责", "score": 5, "type": "check"}, {"seq": "1.3", "content": "设立综合档案工作机构", "standard": "有机构编制文件或批复", "score": 5, "type": "check"}, {"seq": "1.4", "content": "配备专职档案人员", "standard": "查看岗位说明书及名单", "score": 5, "type": "check"} ] }, { "id": "D02", "name": "制度建设", "weight": 30, "items": [ {"seq": "2.1", "content": "建立档案归档制度", "standard": "制度完整且符合规范", "score": 10, "type": "check"}, {"seq": "2.2", "content": "建立档案保管制度", "standard": "包含库房管理、保密等内容", "score": 10, "type": "check"}, {"seq": "2.3", "content": "建立档案利用借阅制度", "standard": "有明确的借阅流程和审批", "score": 10, "type": "check"} ] }, { "id": "D03", "name": "业务管理", "weight": 30, "items": [ {"seq": "3.1", "content": "文件材料收集齐全完整", "standard": "各类门类档案无遗漏", "score": 10, "type": "input"}, {"seq": "3.2", "content": "档案整理规范", "standard": "符合分类方案与保管期限表", "score": 10, "type": "input"}, {"seq": "3.3", "content": "档案移交及时", "standard": "次年6月底前完成移交", "score": 10, "type": "input"} ] }, { "id": "D04", "name": "信息化建设", "weight": 20, "items": [ {"seq": "4.1", "content": "配备档案管理软件", "standard": "软件功能覆盖基本业务", "score": 10, "type": "check"}, {"seq": "4.2", "content": "建立档案目录数据库", "standard": "案卷级、文件级目录数据量", "score": 10, "type": "input"} ] } ] } ```

三、核心自动化脚本开发

接下来编写Python脚本generate_assessment.py。该脚本将读取上述JSON配置,生成一个带有公式计算的Excel文件。脚本包含数据解析、Excel写入、样式定义及自动评分公式植入四个核心模块。

```python import json import pandas as pd from openpyxl import Workbook from openpyxl.styles import Font, Alignment, PatternFill, Border, Side from openpyxl.utils import get_column_letter def load_config(config_path): with open(config_path, 'r', encoding='utf-8') as f: return json.load(f) def create_excel(data): wb = Workbook() ws = wb.active ws.title = "档案制度建设考核" 定义样式 header_font = Font(name='微软雅黑', bold=True, size=11, color='FFFFFF') header_fill = PatternFill(start_color='4F81BD', end_color='4F81BD', fill_type='solid') center_align = Alignment(horizontal='center', vertical='center', wrap_text=True) thin_border = Border(left=Side(style='thin'), right=Side(style='thin'), top=Side(style='thin'), bottom=Side(style='thin')) 写入表头 headers = ['考核维度', '权重(%)', '序号', '考核指标内容', '考核标准', '分值', '自评分', '备注'] ws.append(headers) for col in range(1, len(headers) + 1): cell = ws.cell(row=1, column=col) cell.font = header_font cell.fill = header_fill cell.alignment = center_align cell.border = thin_border current_row = 2 dimension_start_rows = {} 记录每个维度开始行,用于计算小计 for dim in data['dimensions']: dim_start_row = current_row dim_name = dim['name'] dim_weight = dim['weight'] for item in dim['items']: 维度列 ws.cell(row=current_row, column=1, value=dim_name).alignment = center_align ws.cell(row=current_row, column=1).border = thin_border 权重列 ws.cell(row=current_row, column=2, value=dim_weight).alignment = center_align ws.cell(row=current_row, column=2).border = thin_border 序号 ws.cell(row=current_row, column=3, value=item['seq']).alignment = center_align ws.cell(row=current_row, column=3).border = thin_border 内容 ws.cell(row=current_row, column=4, value=item['content']).alignment = Alignment(vertical='center', wrap_text=True) ws.cell(row=current_row, column=4).border = thin_border 标准 ws.cell(row=current_row, column=5, value=item['standard']).alignment = Alignment(vertical='center', wrap_text=True) ws.cell(row=current_row, column=5).border = thin_border 分值 ws.cell(row=current_row, column=6, value=item['score']).alignment = center_align ws.cell(row=current_row, column=6).border = thin_border 自评分 (预留输入口) ws.cell(row=current_row, column=7).value = 0 ws.cell(row=current_row, column=7).border = thin_border 备注 ws.cell(row=current_row, column=8).border = thin_border current_row += 1 dimension_start_rows[dim_name] = {'start': dim_start_row, 'end': current_row - 1, 'weight': dim_weight} 设置列宽 ws.column_dimensions['A'].width = 15 ws.column_dimensions['B'].width = 10 ws.column_dimensions['C'].width = 8 ws.column_dimensions['D'].width = 30 ws.column_dimensions['E'].width = 30 ws.column_dimensions['F'].width = 8 ws.column_dimensions['G'].width = 10 ws.column_dimensions['H'].width = 15 return wb, dimension_start_rows def add_formulas(wb, dimension_info): ws = wb.active total_row = ws.max_row + 2 写入汇总表头 ws.cell(row=total_row, column=1, value="考核汇总").font = Font(bold=True, size=12) current_summary_row = total_row + 1 total_score_cell = None for dim_name, info in dimension_info.items(): 维度名称 ws.cell(row=current_summary_row, column=1, value=dim_name) 维度得分公式:SUM(自评分列) start_row = info['start'] end_row = info['end'] score_range = f"G{start_row}:G{end_row}" formula = f"=SUM({score_range})" score_cell = ws.cell(row=current_summary_row, column=2, value=formula) score_cell.number_format = '0.00' 加权得分公式 weighted_formula = f"=B{current_summary_row} (D{info['start']+1}/100)" 这里简化处理,假设权重直接乘以得分占比逻辑,实际按需调整 修正逻辑:直接计算 (该维度自评总分 / 该维度标准总分) 权重 获取该维度标准总分 std_score_range = f"F{start_row}:F{end_row}" real_weighted_formula = f"=(SUM({score_range})/SUM({std_score_range})){info['weight']}" ws.cell(row=current_summary_row, column=3, value=real_weighted_formula).number_format = '0.00' ws.cell(row=current_summary_row, column=4, value=f"权重占比: {info['weight']}%") current_summary_row += 1 总分行 ws.cell(row=current_summary_row, column=1, value="最终考核得分").font = Font(bold=True) ws.cell(row=current_summary_row, column=3, value=f"=SUM(C{total_row+2}:C{current_summary_row-1})").font = Font(bold=True, color='FF0000') ws.cell(row=current_summary_row, column=3).number_format = '0.00' if __name__ == "__main__": config_data = load_config('assessment_config.json') workbook, dims = create_excel(config_data) add_formulas(workbook, dims) output_file = "档案制度建设考核表_自动生成版.xlsx" workbook.save(output_file) print(f"考核表已生成:{output_file}") ```

四、样式优化与交互逻辑

上述生成的Excel已经具备了基本的结构和计算公式,但为了提升用户体验,我们需要对交互逻辑进行优化。这里主要利用openpyxlDataValidation功能,限制“自评分”列的输入,防止用户输入超过标准分值的分数。

档案制度建设考核表自动化生成与评分实操指南

请在create_excel函数的循环中,在写入“自评分”单元格后添加以下代码段:

```python from openpyxl.worksheet.datavalidation import DataValidation ... (在create_excel函数循环内部,自评分单元格设置之后) ... 创建数据验证规则:整数,介于0和该行标准分之间 注意:由于Excel公式引用动态单元格较复杂,这里演示通用的0-10分限制,实际可根据item['score']动态生成 dv = DataValidation(type="whole", operator="between", formula1="0", formula2=str(item['score'])) dv.error = "请输入有效的分数" dv.errorTitle = "输入错误" dv.prompt = "请输入0到{}之间的整数".format(item['score']) dv.promptTitle = "自评分" 将规则应用到单元格 注意:DataValidation通常添加到Worksheet对象,然后指定范围 为简化演示,此处不直接写入单元格,而是建议在生成后手动设置或通过脚本统一添加范围 ```

实操建议:由于逐个单元格添加数据验证会显著降低脚本运行速度,建议在生成完基础表格后,针对不同分值的列区域统一设置数据验证。例如,找出所有5分的指标区域、10分的指标区域,分别设置验证规则。

五、运行脚本与结果验证

确保assessment_config.jsongenerate_assessment.py位于同一目录下。在终端中执行以下命令运行脚本:

```bash python generate_assessment.py ```

执行成功后,终端将输出考核表已生成:档案制度建设考核表_自动生成版.xlsx。打开生成的Excel文件,您将看到:

  1. 格式规范的表头:蓝色背景,白色文字,列宽已自动调整。
  2. 结构化的考核内容:按维度分组,包含序号、内容、标准和分值。
  3. 自动计算区域:表格底部自动生成的汇总区域,包含各维度加权得分和最终总分。

验证步骤:

  1. 在“自评分”列(G列)输入任意数值,例如将第一项输入5分,第二项输入3分。
  2. 观察底部的“考核汇总”区域,最终考核得分会自动根据公式(自评分/标准分)权重进行更新。
  3. 尝试输入超过标准分值的数值(如标准分为5,输入6),若实施了步骤四的验证,系统将弹出错误提示。

六、进阶功能扩展

如果需要将此工具集成到现有的Web系统中,可以将Python脚本部署为Flask或FastAPI接口。前端只需上传JSON配置文件,后端生成Excel并返回文件流。以下是一个基于FastAPI的最小化接口示例代码:

```python from fastapi import FastAPI from fastapi.responses import FileResponse import shutil app = FastAPI() @app.post("/generate_assessment") async def generate_report(): 调用上述核心逻辑 config_data = load_config('assessment_config.json') workbook, dims = create_excel(config_data) add_formulas(workbook, dims) filename = "temp_assessment.xlsx" workbook.save(filename) return FileResponse(filename, media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', filename=filename) ```

通过这种方式,您可以将枯燥的Word文档或手工Excel考核表转化为一个标准化的、可自动计算的数字化工具,极大提升档案制度建设的考核效率与数据准确性。

AI咨询
热线电话

028-85154420

15388110056

全国售前咨询电话

扫码咨询
安答联动微信公众号二维码

微信扫码关注安答联动

申请试用
热线电话
申请试用

安答联动档案管理系统