如何通过Interop.MSProject.dll读取项目级企业自定义字段值?
读取PWA创建的项目企业自定义字段值(Interop.MSProject.dll)
问题根源解释
你看到的Text1-10是本地项目自定义字段,和PWA中创建的企业级自定义字段不属于同一类,所以读取为空是正常现象。Project对象本身没有GetField方法,但项目的企业自定义字段实际存储在**项目摘要任务(Project Summary Task)**上,而任务对象支持GetField方法,这就是解决问题的突破口。
解决方案步骤
- 获取项目摘要任务:项目的企业自定义字段值绑定在项目的摘要任务上,通过
Project.ProjectSummaryTask可获取该任务对象。 - 转换字段名称为常量:使用
Application.FieldNameToFieldConstant方法,将PWA中创建的企业自定义字段的显示名称转换为对应的PjField常量,注意指定字段类型为pjTaskEnterpriseText(因为摘要任务属于任务类型)。 - 读取字段值:调用摘要任务的
GetField方法并传入字段常量,即可获取对应的值。
代码示例(C#)
using MSProject = Microsoft.Office.Interop.MSProject; // 假设已初始化并获取到目标Project对象 MSProject.Project targetProject = ...; // 替换为你在PWA中创建的企业自定义字段的显示名称 string enterpriseFieldDisplayName = "你的企业字段名称"; try { // 将字段名称转换为对应的PjField常量 MSProject.PjField fieldConst = (MSProject.PjField)targetProject.Application.FieldNameToFieldConstant( enterpriseFieldDisplayName, MSProject.PjFieldType.pjTaskEnterpriseText ); // 从项目摘要任务中读取字段值 string fieldValue = targetProject.ProjectSummaryTask.GetField(fieldConst); // 输出或使用获取到的值,你的案例中会得到"CF1 Value Server" Console.WriteLine(fieldValue); } catch (Exception ex) { // 处理异常:比如字段名称错误、未连接到PWA环境等 Console.WriteLine($"读取失败:{ex.Message}"); }
注意事项
- 字段名称必须和PWA中创建的企业自定义字段显示名称完全一致,区分大小写和空格。
- 如果你的企业字段不是文本类型,需对应修改
PjFieldType参数(比如pjTaskEnterpriseNumber对应数字类型)。 - 确保操作的MPP文件是从PWA同步下来的,或者当前Project对象已连接到PWA环境,否则可能无法识别企业字段。
内容的提问来源于stack exchange,提问作者P_rnd
相关产品推荐
相关产品推荐

