为了实现档案制度建设考核的自动化,我们将使用Python作为核心开发语言,配合Pandas库进行高效的数据处理。这种方法无需复杂的服务器配置,在本地电脑即可直接运行。
确保你的系统中已经安装了Python 3.8或更高版本。打开终端或命令提示符,输入以下命令安装必要的第三方库:
pip install pandas openpyxl
依赖说明:
在编写代码前,必须规范输入数据的格式。我们将考核体系拆分为两个Excel文件:《考核标准表.xlsx》和《部门自查表.xlsx》。这种分离设计确保了考核标准的权威性与部门填报的灵活性。
创建一个名为考核标准表.xlsx的文件,设置以下列头。此表由档案管理员维护,定义了档案制度建设的所有硬性指标。
创建一个名为部门自查表.xlsx的文件,这是各部门填报的数据源。
新建一个文件audit_engine.py。我们将编写一个完整的类ArchiveAuditSystem,包含数据加载、规则匹配、分数计算和结果导出功能。
这一步负责读取两个Excel文件,并将其合并为DataFrame以便处理。请确保Excel文件放在脚本同级目录下。
```python
import pandas as pd
import os
class ArchiveAuditSystem:
def __init__(self, standard_file, input_file):
检查文件是否存在
if not os.path.exists(standard_file) or not os.path.exists(input_file):
raise FileNotFoundError("请检查Excel文件路径是否正确")
读取标准表
self.df_std = pd.read_excel(standard_file)
读取自查表
self.df_input = pd.read_excel(input_file)
合并数据,以'指标编号'为键
self.df_merged = pd.merge(self.df_std, self.df_input, on='指标编号', how='left')
初始化结果列
self.df_merged['系统得分'] = 0.0
self.df_merged['考核评语'] = ''
```
这是核心模块。针对档案制度建设考核的特点,我们实现三种最常用的评分逻辑:布尔制(有/无)、关键词匹配制和数值比例制。
```python
def calculate_scores(self):
for index, row in self.df_merged.iterrows():
rule = row['评分规则']
content = str(row['自查情况']) if pd.notna(row['自查情况']) else ""
full_score = row['标准分值']
score = 0
comment = ""
逻辑1:一票否决或布尔制 (有材料得满分,无得0分)
if rule == "PASS_OR_0":
if len(content.strip()) > 0 and content != "无":
score = full_score
comment = "符合要求"
else:
score = 0
comment = "未提供材料或情况说明为空"
逻辑2:关键词包含制 (必须包含特定词)
elif rule.startswith("KEYWORD:"):
keyword = rule.split(":")[1]
if keyword in content:
score = full_score
comment = f"包含关键词'{keyword}'"
else:
score = 0
comment = f"缺少关键要素'{keyword}'"
逻辑3:数值比例制 (用于归档率等指标)
elif rule.startswith("RATE:"):
try:
假设自查情况填的是百分比数值,如 "95"
val = float(content.replace('%', ''))
target = float(rule.split(":")[1])
if val >= target:
score = full_score
else:
按比例扣分示例

score = full_score (val / 100)
comment = f"实际完成率{val}%,目标{target}%"
except ValueError:
score = 0
comment = "数据格式错误,无法计算比例"
写入结果
self.df_merged.at[index, '系统得分'] = score
self.df_merged.at[index, '考核评语'] = comment
```
计算完成后,我们需要生成一份带汇总分析的Excel报告。这里我们不仅输出明细,还增加了一个“汇总”Sheet页。
```python
def export_report(self, output_file="考核结果报告.xlsx"):
计算总分
total_score = self.df_merged['系统得分'].sum()
max_score = self.df_merged['标准分值'].sum()
pass_rate = (total_score / max_score) 100
创建汇总数据
summary_data = {
'项目': ['总分', '满分', '通过率'],
'数值': [total_score, max_score, f"{pass_rate:.2f}%"]
}
df_summary = pd.DataFrame(summary_data)
写入Excel
with pd.ExcelWriter(output_file, engine='openpyxl') as writer:
self.df_merged.to_excel(writer, sheet_name='考核明细', index=False)
df_summary.to_excel(writer, sheet_name='考核汇总', index=False)
print(f"考核完成!报告已生成:{output_file}")
print(f"最终得分:{total_score} / {max_score}")
```
在档案安全考核中,往往存在“一票否决”项(如发生严重档案丢失)。我们需要在主逻辑中增加这一检查。请在ArchiveAuditSystem类中添加以下方法,并在calculate_scores之前调用。
```python
def check_veto_power(self, veto_keyword="安全事故"):
"""
检查自查情况中是否包含一票否决的关键词。
如果包含,直接将所有分数置0并返回。
"""
for index, row in self.df_merged.iterrows():
content = str(row['自查情况'])
if veto_keyword in content:
print(f"警告:检测到一票否决项({veto_keyword}),考核不通过!")
self.df_merged['系统得分'] = 0
self.df_merged['考核评语'] = "触发一票否决"
return True
return False
```
注意:修改calculate_scores函数,在循环开始前先调用if self.check_veto_power(): return。
代码编写完毕后,我们需要进行实际运行测试。确保你的目录下包含上述两个Excel文件,然后创建一个启动脚本run_audit.py。
```python
from audit_engine import ArchiveAuditSystem
if __name__ == "__main__":
实例化系统,传入标准表和自查表
system = ArchiveAuditSystem(
standard_file="考核标准表.xlsx",
input_file="部门自查表.xlsx"
)
执行计算
system.calculate_scores()
导出结果
system.export_report("2023年度档案制度建设考核结果.xlsx")
```
在终端执行python run_audit.py。如果一切正常,你将看到控制台输出总分信息,并在目录下生成包含“考核明细”和“考核汇总”两个Sheet页的Excel文件。打开文件,检查“系统得分”列是否根据你设定的规则(如包含关键词、非空判断)正确计算了分数。
通过以上步骤,你已成功构建了一套零门槛、可复用的档案制度建设考核自动化系统。这套系统不仅减少了人工核对Excel的繁琐工作,还通过代码固化了考核标准,确保了每一次考核的公正性和一致性。