117 lines
4.9 KiB
Python
117 lines
4.9 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
生成三位一体对比表的详细报告
|
|
"""
|
|
|
|
import pandas as pd
|
|
|
|
def main():
|
|
# 读取Excel文件
|
|
df = pd.read_excel("许可事项三位一体对比表_v2.xlsx")
|
|
|
|
# 生成文本报告
|
|
with open("三位一体对比报告.txt", "w", encoding="utf-8") as f:
|
|
f.write("="*80 + "\n")
|
|
f.write("许可事项三位一体对比表 - 详细报告\n")
|
|
f.write("="*80 + "\n\n")
|
|
|
|
f.write(f"总事项数量: {len(df)}\n\n")
|
|
|
|
# 统计各列的勾选情况
|
|
client_count = (df['客户提供'] == '✓').sum()
|
|
received_count = (df['已接收'] == '✓').sum()
|
|
db_count = (df['已入库'] == '✓').sum()
|
|
|
|
f.write(f"1. 客户提供的事项: {client_count}\n")
|
|
f.write(f"2. 已接收的事项: {received_count}\n")
|
|
f.write(f"3. 已入库的事项: {db_count}\n\n")
|
|
|
|
# 统计状态分布
|
|
f.write("状态分布:\n")
|
|
f.write("-" * 40 + "\n")
|
|
status_counts = df['状态说明'].value_counts()
|
|
for status, count in status_counts.items():
|
|
f.write(f" {status}: {count}\n")
|
|
|
|
f.write("\n" + "="*80 + "\n")
|
|
f.write("需要关注的事项\n")
|
|
f.write("="*80 + "\n\n")
|
|
|
|
# 完整的事项(三方都有)
|
|
complete = df[df['状态说明'] == '完整(三方都有)']
|
|
f.write(f"【完整(三方都有)】({len(complete)} 项)\n")
|
|
if len(complete) > 0:
|
|
for idx, row in complete.iterrows():
|
|
f.write(f" {row['序号']}. {row['事项名称']}\n")
|
|
f.write("\n")
|
|
|
|
# 待入库的事项
|
|
to_import = df[df['状态说明'] == '待入库']
|
|
f.write(f"【待入库】({len(to_import)} 项)\n")
|
|
f.write("说明: 客户要求显示,已接收文件,但尚未导入数据库\n")
|
|
if len(to_import) > 0:
|
|
for idx, row in to_import.iterrows():
|
|
f.write(f" {row['序号']}. {row['事项名称']}\n")
|
|
f.write("\n")
|
|
|
|
# 缺少源文件的事项
|
|
missing_source = df[df['状态说明'] == '缺少源文件']
|
|
f.write(f"【缺少源文件】({len(missing_source)} 项)\n")
|
|
f.write("说明: 客户要求显示,已入库,但缺少原始文件\n")
|
|
if len(missing_source) > 0:
|
|
for idx, row in missing_source.iterrows():
|
|
f.write(f" {row['序号']}. {row['事项名称']}\n")
|
|
f.write("\n")
|
|
|
|
# 缺少文件和数据的事项
|
|
missing_all = df[df['状态说明'] == '缺少文件和数据']
|
|
f.write(f"【缺少文件和数据】({len(missing_all)} 项)\n")
|
|
f.write("说明: 客户要求显示,但既没有文件也没有入库\n")
|
|
if len(missing_all) > 0:
|
|
for idx, row in missing_all.head(50).iterrows():
|
|
f.write(f" {row['序号']}. {row['事项名称']}\n")
|
|
if len(missing_all) > 50:
|
|
f.write(f" ... 还有 {len(missing_all) - 50} 项\n")
|
|
f.write("\n")
|
|
|
|
# 未入库且客户未要求
|
|
not_required = df[df['状态说明'] == '未入库且客户未要求']
|
|
f.write(f"【未入库且客户未要求】({len(not_required)} 项)\n")
|
|
f.write("说明: 已接收文件但未入库,且客户未要求显示\n")
|
|
if len(not_required) > 0:
|
|
for idx, row in not_required.head(50).iterrows():
|
|
f.write(f" {row['序号']}. {row['事项名称']}\n")
|
|
if len(not_required) > 50:
|
|
f.write(f" ... 还有 {len(not_required) - 50} 项\n")
|
|
f.write("\n")
|
|
|
|
# 已接收且已入库(客户未要求)
|
|
received_and_db = df[df['状态说明'] == '客户未要求']
|
|
f.write(f"【已接收且已入库(客户未要求)】({len(received_and_db)} 项)\n")
|
|
f.write("说明: 已接收并入库,但客户未要求显示\n")
|
|
if len(received_and_db) > 0:
|
|
for idx, row in received_and_db.iterrows():
|
|
f.write(f" {row['序号']}. {row['事项名称']}\n")
|
|
f.write("\n")
|
|
|
|
# 仅数据库有
|
|
only_db = df[df['状态说明'] == '仅数据库有']
|
|
f.write(f"【仅数据库有】({len(only_db)} 项)\n")
|
|
f.write("说明: 仅在数据库中,没有源文件且客户未要求\n")
|
|
if len(only_db) > 0:
|
|
for idx, row in only_db.iterrows():
|
|
f.write(f" {row['序号']}. {row['事项名称']}\n")
|
|
f.write("\n")
|
|
|
|
f.write("="*80 + "\n")
|
|
f.write("对比表文件: 许可事项三位一体对比表_v2.xlsx\n")
|
|
f.write("="*80 + "\n")
|
|
|
|
print("报告已生成: 三位一体对比报告.txt")
|
|
print(f"总事项数: {len(df)}")
|
|
print(f"客户提供: {client_count}, 已接收: {received_count}, 已入库: {db_count}")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|