利用WPS 中的PY脚本功能,使用 Python 统计 WPS 在线表格数据(案例是统计开发计划任务进度)

使用 Python 统计 WPS 表格开发进度教程

输出结果

运行代码后,将输出整体进度和按负责人分组的进度统计。整体进度包括任务数量进度和工时权重进度,按负责人分组的进度包括任务完成率和工时完成率。

导入 WPS 表格数据

使用 pandas 的 read_excel 方法读取 WPS 表格数据。假设表格包含列:任务、优先级、工时(天)、负责人、进度。

python 复制代码
import pandas as pd
df = pd.read_excel('xxx系统.xlsx', sheet_name="xxx系统(feature-plan-2.0.1)")

如果是在线表格,那么使用wps提供的api,

https://airsheet.wps.cn/pydocs/db_table/dbt.html 数据表(智能表格)

https://airsheet.wps.cn/pydocs/work_table/xl.html 工作表

筛选关键任务

筛选优先级为"非常重要"且工时不为空的任务。

python 复制代码
task_df = df[(df['优先级'] == '非常重要') & (df['工时(天)'].notna())].copy()
计算整体进度

统计任务数量进度和工时权重进度。

python 复制代码
total_tasks = len(task_df)
completed_tasks = len(task_df[task_df['进度'] == 1])
progress_by_count = completed_tasks / total_tasks

total_hours = task_df['工时(天)'].sum()
completed_hours = (task_df['工时(天)'] * task_df['进度']).sum()
progress_by_hours = completed_hours / total_hours

result = {
    '总任务数': total_tasks,
    '已完成任务数': completed_tasks,
    '任务数量进度': f"{progress_by_count:.1%}",
    '总工时(天)': total_hours,
    '已完成工时(天)': completed_hours,
    '工时权重进度': f"{progress_by_hours:.1%}"
}
result_df = pd.DataFrame.from_dict(result, orient='index', columns=['值'])
print(result_df)
按负责人分组统计

计算每个负责人的任务总数、已完成任务数、任务完成率、总工时、已完成工时和工时完成率。

python 复制代码
progress_by_person = task_df.groupby('负责人').agg(
    任务总数=('任务', 'count'),
    已完成任务数=('进度', lambda x: (x == 1).sum()),
    总工时=('工时(天)', 'sum'),
    已完成工时=('工时(天)', lambda x: (x * task_df.loc[x.index, '进度']).sum())
).reset_index()

progress_by_person['任务完成率'] = progress_by_person['已完成任务数'] / progress_by_person['任务总数']
progress_by_person['工时完成率'] = progress_by_person['已完成工时'] / progress_by_person['总工时']

progress_by_person['任务完成率'] = progress_by_person['任务完成率'].apply(lambda x: f"{x:.1%}")
progress_by_person['工时完成率'] = progress_by_person['工时完成率'].apply(lambda x: f"{x:.1%}")

progress_by_person = progress_by_person.sort_values('总工时', ascending=False)
progress_by_person[['负责人', '任务总数', '已完成任务数', '任务完成率', '总工时', '已完成工时', '工时完成率']]
注意事项

确保 WPS 表格中的数据类型正确,例如工时列应为数值类型,进度列应为 0 到 1 之间的数值。如果数据格式不正确,可能导致计算结果错误。

相关推荐
呱呱复呱呱1 小时前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽5 小时前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码6 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱15 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵17 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio21 小时前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户0332126663671 天前
使用 Python 从零创建 Word 文档
python
Csvn1 天前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽1 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户556918817531 天前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维