You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#通过MPXJ从MS Project的mpp文件提取Sprint等字段数据

针对MPXJ无法读取Sprint、Board Status字段的解决方案

MPXJ原生读取方案

  • 这两个字段属于微软Project敏捷模板内置的系统字段,不属于自定义字段范畴,因此ProjectFile.getCustomFields()无法查询到对应结果,getFieldByAlias()调用失败大概率是传入了中文别名,MPXJ内置枚举对应的是英文字段标识,直接通过TaskField枚举取值即可,示例代码如下:
// 读取单任务字段值
Task targetTask = projectFile.getTaskByID(任务ID);
String sprintValue = targetTask.get(TaskField.SPRINT);
String boardStatusValue = targetTask.get(TaskField.BOARD_STATUS);
  • 若上述方法返回空值,先升级MPXJ到11.0.0及以上稳定版本,低版本对Project敏捷字段的适配存在缺陷,未覆盖部分新版MPP文件的字段存储逻辑。
  • 升级后仍无法读取的,可遍历所有已填充的任务字段匹配值,部分本地化版本的Project文件会存在字段标识偏移的情况,遍历代码如下:
Task sampleTask = projectFile.getTasks().get(0);
for (TaskField field : projectFile.getTasks().getPopulatedFields()) {
    Object fieldValue = sampleTask.get(field);
    System.out.printf("字段ID:%s 字段名:%s 字段值:%s%n", field.getID(), field.getName(), fieldValue);
}

运行后比对输出值和原MPP文件中的Sprint、Board Status实际值,找到对应字段后直接通过ID调用即可。

替代解析方案

  • .NET环境下可使用微软官方Microsoft.Office.Interop.MSProject接口读取,可兼容所有Project版本的内置字段,缺点是运行环境需要提前安装微软Project软件。
  • 跨环境场景可选用Aspose.Tasks商业库,对敏捷类字段的兼容性优于MPXJ,无需依赖本地安装Project软件,可满足商用场景需求。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:42:01