利用WPS 中的PY脚本功能,使用 Python 统计 WPS 在线表格数据(案例是统计开发计划任务进度)_wps python
使用 Python 统计 WPS 表格开发进度教程
输出结果
运行代码后,将输出整体进度和按负责人分组的进度统计。整体进度包括任务数量进度和工时权重进度,按负责人分组的进度包括任务完成率和工时完成率。
导入 WPS 表格数据
使用 pandas 的 read_excel
方法读取 WPS 表格数据。假设表格包含列:任务、优先级、工时(天)、负责人、进度。
import pandas as pddf = 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 工作表
筛选关键任务
筛选优先级为“非常重要”且工时不为空的任务。
task_df = df[(df[\'优先级\'] == \'非常重要\') & (df[\'工时(天)\'].notna())].copy()
计算整体进度
统计任务数量进度和工时权重进度。
total_tasks = len(task_df)completed_tasks = len(task_df[task_df[\'进度\'] == 1])progress_by_count = completed_tasks / total_taskstotal_hours = task_df[\'工时(天)\'].sum()completed_hours = (task_df[\'工时(天)\'] * task_df[\'进度\']).sum()progress_by_hours = completed_hours / total_hoursresult = { \'总任务数\': 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)
按负责人分组统计
计算每个负责人的任务总数、已完成任务数、任务完成率、总工时、已完成工时和工时完成率。
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 之间的数值。如果数据格式不正确,可能导致计算结果错误。