
使用mpxj库在java中生成ms project兼容的xml文件时,无法直接控制ms project打开文件时的默认视图和列显示。本文将详细介绍一种有效的解决方案:通过创建和利用预设布局的ms project mpp模板文件,结合mpxj生成的数据,实现导入后自动显示“工作量”和“id”等指定列,从而优化用户体验。
MPXJ是一个强大的Java库,用于读写各种项目管理文件格式,包括Microsoft Project的MSPDI (Project Data Interchange) XML格式。然而,MSPDI XML文件主要关注项目数据的结构和内容(如任务、资源、工期、工作量等),而非其在Microsoft Project客户端中的视觉呈现或默认视图设置。这意味着,即使您在MPXJ中正确设置了任务的“工作量”和“ID”等数据,当MS Project打开由MPXJ生成的XML文件时,它通常会应用其默认视图,而不会自动显示这些特定的列,除非用户手动添加。
要实现打开文件时自动显示指定列,通常需要操作原生的.mpp文件格式,因为.mpp文件包含了项目数据以及所有视图、报表、宏等显示相关的配置。
鉴于MSPDI XML的限制,最实用且推荐的解决方案是结合MPXJ生成的数据与一个预先配置好的MS Project模板文件。这种方法允许您在MS Project中定义所需的显示布局,然后将MPXJ生成的数据导入到这个布局中。
首先,您需要在Microsoft Project客户端中创建一个包含所需默认视图和列的模板文件。
接下来,您需要使用Java和MPXJ库来生成包含所有项目数据的MSPDI XML文件。确保在生成过程中,所有任务的“ID”和“工作量”等属性都已正确填充。
以下是一个简化的代码示例,展示了如何使用MPXJ设置任务的ID和工作量:
import net.sf.mpxj.Duration;
import net.sf.mpxj.ProjectFile;
import net.sf.mpxj.Task;
import net.sf.mpxj.TaskType;
import net.sf.mpxj.TimeUnit;
import net.sf.mpxj.mspdi.MSPDIWriter; // 用于生成XML文件
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.Objects;
public class MpxjProjectGenerator {
public static void main(String[] args) {
ProjectFile project = new ProjectFile();
project.setName("Generated Project with Work and ID");
// 假设有一个Contract对象,这里简化为直接添加任务
Task contractElement = project.addTask();
contractElement.setName("Contract Phase");
contractElement.setStart(new Date()); // 设置开始日期
contractElement.setOutlineLevel(1);
contractElement.setID(1); // 设置ID
Task workpackage = contractElement.addTask();
workpackage.setName("Work Package A");
workpackage.setOutlineLevel(2);
workpackage.setID(2); // 设置ID
Task task = workpackage.addTask();
task.setName("Detailed Task 1");
task.setType(TaskType.FIXED_WORK);
task.setOutlineLevel(3);
task.setWork(Duration.getInstance(40, TimeUnit.HOURS)); // 设置工作量
task.setDuration(Duration.getInstance(5, TimeUnit.DAYS)); // 假设每天8小时工作
task.setRemainingWork(Duration.getInstance(40, TimeUnit.HOURS));
task.setID(3); // 设置ID
// 更多任务和资源分配...
// 示例中省略了资源分配部分,但原理类似,确保数据正确设置即可
try {
// 将项目保存为MSPDI XML文件
MSPDIWriter writer = new MSPDIWriter();
writer.write(project, new File("generated_project.xml"));
System.out.println("Project data saved to generated_project.xml");
} catch (IOException e) {
e.printStackTrace();
}
}
}在上述代码中,task.setWork() 方法用于设置任务的工作量,element.setID() 方法用于设置任务的ID。MPXJ会确保这些数据被正确地写入到MSPDI XML文件中。
这是关键的一步,它将MPXJ生成的数据与您预设的布局结合起来。
导入完成后,MPXJ生成的项目数据将填充到 MyProjectTemplate.mpp 文件中,并且由于模板已经预设了视图,您将立即看到“工作量”和“ID”等列显示在默认视图中。
虽然上述模板方法是使用MPXJ的最佳实践,但也有其他工具或方法可以考虑,尤其是在需要更直接的MPP文件生成和布局控制时:
以上就是使用MPXJ生成MS Project文件并预设默认显示列的策略的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号