
本文探讨了如何在使用Java MPXJ库生成MS Project兼容的XML文件时,实现MS Project中默认显示特定列(如“工作”和“ID”)。由于MPXJ主要处理数据结构而非视觉布局,直接设置默认列显示存在局限。教程提供了一种有效策略:通过创建预设布局的MS Project模板文件,并在导入MPXJ生成的XML数据时应用该模板,从而达到预期的视觉效果。文章还提供了MPXJ数据填充示例及其他替代方案。
MPXJ是一个功能强大的开源Java库,专为读写各种项目管理文件格式而设计,其中包括Microsoft Project的MSPDI XML格式。它的核心功能在于处理项目数据的结构化表示,例如任务、资源、分配、工期、依赖关系等。通过MPXJ,开发者可以在Java应用程序中方便地创建、修改和导出项目数据。
然而,MPXJ在生成MSPDI XML文件时,主要关注数据内容的准确性和完整性,通常不直接控制MS Project客户端的视觉呈现细节。这意味着,诸如默认显示的列、视图布局、列宽、排序规则或颜色方案等视觉属性,通常是MS Project应用程序自身的设置,或者存储在其专有的MPP二进制文件中。因此,当通过MPXJ生成的XML文件在MS Project中打开时,MS Project会使用其默认视图或用户上次使用的视图设置,而不是MPXJ定义的特定列布局。这是因为MSPDI XML标准本身并未包含丰富的视觉布局指令。
在使用MPXJ时,关键步骤是构建项目对象模型,包括任务、资源及其相关属性。以下代码片段展示了如何使用MPXJ创建任务、设置其属性(如名称、开始日期、大纲级别、ID、工作量和工期)以及分配资源。这段代码示例来源于实际应用场景,它有效地将外部数据模型化为MPXJ项目结构。
立即学习“Java免费学习笔记(深入)”;
// 假设_project是Project实例,extractedRow是包含数据的自定义对象
// id是用于生成唯一ID的计数器
if (!extractedRow.getElement().isEmpty()) {
// 创建一个顶级元素任务
element = contract.addTask();
element.setName(extractedRow.getElement());
element.setStart(startingDate);
element.setOutlineLevel(LookUp.Mpp_Conversion_Element_OutlineLevel());
element.setID(id++);
} else if (!extractedRow.getWorkpackage().isEmpty()) {
// 创建一个工作包任务,作为element的子任务
workpackage = Objects.requireNonNull(element).addTask();
workpackage.setName(extractedRow.getWorkpackage());
workpackage.setOutlineLevel(LookUp.Mpp_Conversion_Workpackage_OutlineLevel());
workpackage.setID(id++);
} else if (!extractedRow.getTask().isEmpty()) {
// 创建一个具体任务,作为workpackage的子任务
task = Objects.requireNonNull(workpackage).addTask();
task.setName(extractedRow.getTask());
task.setType(TaskType.FIXED_WORK); // 设置任务类型为固定工作
task.setOutlineLevel(LookUp.Mpp_Conversion_Task_OutlineLevel());
// 设置工作量和工期
task.setWork(Duration.getInstance(extractedRow.getEstimatedTime(), TimeUnit.HOURS));
task.setDuration(Duration.getInstance(extractedRow.getEstimatedTime() / 8, TimeUnit.DAYS));
task.setRemainingWork(Duration.getInstance(extractedRow.getEstimatedTime(), TimeUnit.HOURS));
task.setID(id++);
// 如果有角色信息,则分配资源
if (!extractedRow.getRole().isEmpty()) {
for (Resource resource : _project.getResources()) {
if (resource.getName().equals(_filereader.get_mapper().getMapping(extractedRow.getRole()))) {
assn = Objects.requireNonNull(task).addResourceAssignment(resource);
assn.setStart(task.getStart());
assn.setWork(Duration.getInstance(extractedRow.getEstimatedTime(), TimeUnit.HOURS));
}
}
}
}上述代码成功地将数据模型化为MPXJ项目结构,并设置了“工作”等关键属性。然而,这仅仅是数据层面的操作,它确保了数据在逻辑上是正确的,但与MS Project打开文件时默认显示的列无关。为了控制视觉布局,我们需要采用更间接的方法。
由于MPXJ生成的MSPDI XML文件不包含视觉布局信息,最直接且有效的解决方案是利用MS Project自身的模板功能。这种方法允许您在MS Project中预定义所需的视觉布局,然后将MPXJ生成的数据导入到这个模板中,从而达到预设列显示的效果。
首先,您需要在Microsoft Project中创建一个包含所需视觉布局的模板文件:
接下来,您将把MPXJ生成的数据导入到这个模板中:
除了上述利用MS Project模板的方法,还有其他一些替代方案,您可以根据项目需求和资源进行评估:
通过MPXJ在Java中生成MS Project兼容的XML文件,主要侧重于项目数据的结构化和准确性。要解决MS Project打开文件时默认显示特定列的问题,最可靠且推荐的方法是结合使用MPXJ生成的数据和预先配置的MS Project .mpp 模板文件。
关键注意事项:
通过遵循上述模板方法,您可以在Java应用程序中利用MPXJ的强大功能生成项目数据,同时确保最终的MS Project文件以预期的视觉布局呈现,从而提升用户体验和工作效率。
以上就是使用MPXJ在Java中生成MS Project文件并预设列显示:模板方法详解的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号