P6和Excel,计划工程师桌面上最常用的两个工具。
但大部分人用它们的方式是:在P6里排计划,把结果导出到Excel做报表。这没错,但只发挥了10%的潜力。
P6和Excel的真正关系,不是"导出再处理",而是各司其职、数据互通、互相增强。
一、数据清洗:Excel是P6的最好伴侣
场景:批量修改作业属性
P6的Activity Table里,批量修改同一列的数据很容易(选中列→右键→Fill Down)。但如果你要基于复杂逻辑批量修改,P6就力不从心了。
比如:把某个WBS下所有Duration > 10天的作业,Priority改为"High",同时给它们统一加上某种Note?P6里要一个个手动改。
正确做法:导出 → Excel处理 → 导入
从P6导出Activity Table(XLS格式),包含Activity ID、Activity Name、Duration、WBS、Priority等字段 在Excel里用公式批量计算新值: =IF(AND(WBS="xxx",Duration>10),"High",Priority)把处理后的Excel另存为CSV(逗号分隔) 在P6里用Import Wizard(项目管理→导入/导出)导入更新后的作业属性
关键技巧:Import的时候映射要对
| Activity ID | ||
| Duration | ||
| Start / Finish |
重要提醒:导入前一定要备份当前项目(Export to XER)。导入操作是不可逆的,一旦数据搞乱了,只能从备份恢复。
二、报表生成:P6做数据,Excel做展示
P6的报表为什么不好用?
P6内置了Report Wizard,可以生成各种报表。但用过的人都知道:
- 格式调整很痛苦
:P6的Report Writer界面像1995年的产品,调个列宽要半天 - 图表能力几乎为零
:想做个折线图展示SPI趋势?P6做不到 - 跨项目汇总困难
:你有10个子项目,想做一个合并的进度汇总表?P6 Report做起来很费劲
解决方法:P6负责"出数据",Excel负责"做报表"。
标准流程
- 在P6里设计好需要的字段
(Activity ID, Name, Original Duration, Remaining Duration, % Complete, Start, Finish, Total Float, WBS...) - 导出为Excel(XLS)
——不要用CSV,XLS格式保留更多格式信息 - 在Excel里用数据透视表做汇总
:按WBS层级汇总完成率、按责任人汇总剩余工期、按月份汇总计划完成产值 - 用Excel图表展示趋势
:S曲线(计划vs实际完成产值)、关键路径变化趋势、资源直方图 - 保存为模板
:第一次做麻烦,第二次开始只要刷新数据就行
实战案例:某EPC项目,业主要求每周提交"按WBS汇总的进度完成率报表"。P6 Report Wizard做这个报表需要2小时(调格式+生成+导出PDF)。改成"P6导出→Excel数据透视表模板"之后,每次更新只需要10分钟(刷数据→刷新透视表→另存为PDF)。
更高级:用Power Query自动化
如果你经常要从P6导出同类数据,可以更进一步:用Excel Power Query设置自动刷新。
第一次手动导出P6数据,保存为一个固定的Excel文件(比如 P6_Export_Weekly.xlsx)新建一个Excel文件,用 Power Query → 从文件 → 从工作簿,连接到上面的文件 在Power Query里做好所有数据处理逻辑(筛选、分组、计算新列) 以后每次只需要在P6里覆盖导出到同一个文件,然后在报表Excel里点"刷新全部",数据就自动更新了
这套方法的本质:把"数据处理逻辑"和"原始数据"分离。P6只负责产生最新数据,Excel负责把数据变成报表。
P6 vs Excel 报表能力对比
三、现金流预测:P6+Excel组合拳
为什么P6做现金流不够用?
P6有时间维度、有成本维度,但偏偏没有付款规则引擎。
P6知道什么时间、什么作业、花了多少钱(计划) 但P6不知道进度款付80%、保留金扣10%、审批后30天付款这些规则 所以P6算出来的"成本时间序列" ≠ "现金流量时间序列"
解决方法:P6出数据,Excel加付款规则,输出现金流预测。
标准流程
- P6导出
:Activity Table + Resource Assignment,按月汇总得到"计划成本发生时间序列" - Excel里加付款规则
: 收入端:进度款 = 完成产值 × 付款比例(通常80%),滞后审批周期天数到账 支出端:材料预付款(PO金额的30%,订单确认后付) + 到货付款(65%) + 保留金(5%,质保期满后付) - 计算净现金流
:每月净现金流 = 当月应收 - 当月应付 - 累计净现金流
:判断资金缺口最大的月份,提前准备流动资金
进阶:用Excel Scenario Manager做敏感性分析
现金流预测的最大问题是"假设太多"——业主付款周期真的是30天吗?会不会拖到45天?
在Excel里用Scenario Manager(方案管理器),设置"乐观方案"(付款周期30天)、"中性方案"(45天)、"悲观方案"(60天),一键切换看资金缺口变化。这比P6里调来调去高效得多。
四、数据分析:Excel补充P6的分析短板
P6的分析能力为什么不够?
P6有Global Change、Filter、Group and Sort,能做不少数据分析。但遇到以下场景就尴尬了:
实战技巧:用Excel做P6数据的"异常检测"
计划工程师经常要审查别人提交的进度更新是否合理。一个实用技巧:
检测% Complete更新是否异常
把最近4周的P6进度导出(包含Activity ID, Data Date, % Complete),在Excel里计算:
=本周%Complete - 上周%Complete → 得到"本周进度增量"
然后看:
- 增量 > 15% 的作业
:是不是"突击填报"?实际没做那么多,为了赶报告数字好看 - 增量 = 0% 且已超开始日期的作业
:是不是"瞒报"?实际延误了但不填 - 增量突然从0跳到100%
:是不是把多个周的进度揉在一周里填报了?
这套分析P6做不了,Excel几行公式就搞定。
五、自动化:用VBA打通P6和Excel
P6有API,但大部分人不知道怎么用
Oracle提供了P6 Web Services API和P6 Integration API。理论上可以写程序直接读写P6数据,不需要手工导出导入。
但大部分计划工程师不是程序员,写不了API调用代码。
退而求其次的方案:用VBA自动化"导出 → 处理 → 导入"流程。
实用场景:半自动化工作流
注意:P6 Professional(桌面版)没有直接暴露COM接口给VBA调用。但可以通过间接方式实现半自动化:
在P6里设置好"导出模板"(Export Template),每次点一下就能导出到固定路径 用Excel VBA的 Workbook_Open事件,自动打开那个导出文件、处理数据、刷新报表每次的工作流变成:P6点一下导出 → 打开Excel → 自动刷新所有报表
更现代的替代方案:Power Automate + P6 REST API
如果你用的是P6 EPPM(Web版),它有REST API。可以用Microsoft Power Automate:
设置一个定时触发器(比如每周一早上8点) 调用P6 REST API,获取上周的进度数据 将数据写入Excel Online的一个表格里 触发Excel Online计算,生成PDF报表 自动将PDF报表作为附件发送给相关人
这套流程完全不需要人工介入,适合周期性报表的自动化。
六、总结
| 批量修改作业属性 | |
| 周期性报表 | |
| 现金流预测 | |
| 进度数据异常检测 | |
| 高度自动化 |
P6 + Excel 搭配使
夜雨聆风