0

0

使用MPXJ生成MS Project文件并预设默认显示列的策略

心靈之曲

心靈之曲

发布时间:2025-11-09 14:44:37

|

401人浏览过

|

来源于php中文网

原创

使用MPXJ生成MS Project文件并预设默认显示列的策略

使用mpxj库在java中生成ms project兼容的xml文件时,无法直接控制ms project打开文件时的默认视图和列显示。本文将详细介绍一种有效的解决方案:通过创建和利用预设布局的ms project mpp模板文件,结合mpxj生成的数据,实现导入后自动显示“工作量”和“id”等指定列,从而优化用户体验。

理解MPXJ与MS Project视图的限制

MPXJ是一个强大的Java库,用于读写各种项目管理文件格式,包括Microsoft Project的MSPDI (Project Data Interchange) XML格式。然而,MSPDI XML文件主要关注项目数据的结构和内容(如任务、资源、工期、工作量等),而非其在Microsoft Project客户端中的视觉呈现或默认视图设置。这意味着,即使您在MPXJ中正确设置了任务的“工作量”和“ID”等数据,当MS Project打开由MPXJ生成的XML文件时,它通常会应用其默认视图,而不会自动显示这些特定的列,除非用户手动添加。

要实现打开文件时自动显示指定列,通常需要操作原生的.mpp文件格式,因为.mpp文件包含了项目数据以及所有视图、报表、宏等显示相关的配置。

核心解决方案:利用MS Project模板文件

鉴于MSPDI XML的限制,最实用且推荐的解决方案是结合MPXJ生成的数据与一个预先配置好的MS Project模板文件。这种方法允许您在MS Project中定义所需的显示布局,然后将MPXJ生成的数据导入到这个布局中。

1. 创建预设布局的MS Project模板文件

首先,您需要在Microsoft Project客户端中创建一个包含所需默认视图和列的模板文件。

  1. 打开Microsoft Project: 启动MS Project应用程序。
  2. 创建新项目: 选择“空白项目”创建一个新的空项目。
  3. 配置视图和列:
    • 切换到您希望作为默认视图的视图(例如,“甘特图”视图)。
    • 在表格区域,右键点击列标题,选择“插入列”。
    • 添加您希望默认显示的列,例如“工作量 (Work)”和“ID”。
    • 调整列的顺序、宽度以及其他任何视图设置,使其符合您的预期。
  4. 保存模板:: 将这个空白但已配置好视图的项目文件保存为.mpp格式。例如,您可以将其命名为 MyProjectTemplate.mpp。这个文件将作为您导入数据的基础。

2. 使用MPXJ生成项目数据(MSPDI XML)

接下来,您需要使用Java和MPXJ库来生成包含所有项目数据的MSPDI XML文件。确保在生成过程中,所有任务的“ID”和“工作量”等属性都已正确填充。

以下是一个简化的代码示例,展示了如何使用MPXJ设置任务的ID和工作量:

AI at Meta
AI at Meta

Facebook 旗下的AI研究平台

下载
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文件中。

3. 在MS Project中导入MSPDI并应用模板

这是关键的一步,它将MPXJ生成的数据与您预设的布局结合起来。

  1. 打开MS Project: 启动MS Project。
  2. 打开模板文件: 选择“文件” -> “打开”,然后浏览并打开您在第一步中创建的 MyProjectTemplate.mpp 文件。此时,您应该能看到模板中预设的视图和列(例如,“工作量”和“ID”列)。
  3. 导入MSPDI XML文件: 在已打开模板项目的情况下,再次选择“文件” -> “打开”。
  4. 选择XML文件: 浏览并选择您在第二步中由MPXJ生成的 generated_project.xml 文件。
  5. 选择导入选项: MS Project会弹出一个“导入向导”或“打开文件”对话框。在这里,您需要选择导入方式:
    • “追加到现有项目” (Append the new project to the active project): 这是最常用的选项,它会将XML文件中的所有任务、资源等数据添加到当前打开的模板项目中。
    • “更新现有项目” (Merge the new project into the active project): 如果XML文件中的任务与模板项目中的任务具有相同的ID,此选项可以用于更新现有任务数据。
  6. 选择目标项目: 确认目标是当前打开的 MyProjectTemplate.mpp 项目。
  7. 完成导入: 按照向导的指示完成导入过程。

导入完成后,MPXJ生成的项目数据将填充到 MyProjectTemplate.mpp 文件中,并且由于模板已经预设了视图,您将立即看到“工作量”和“ID”等列显示在默认视图中。

替代方案(非MPXJ直接控制)

虽然上述模板方法是使用MPXJ的最佳实践,但也有其他工具或方法可以考虑,尤其是在需要更直接的MPP文件生成和布局控制时:

  • Aspose.Tasks: 这是一个商业库,它提供了更高级的功能,包括直接生成.mpp文件以及对项目布局、视图和报表进行更细粒度的控制。如果您对MPP文件有严格的布局要求,并且预算允许,Aspose.Tasks可能是一个选择。
  • VBA脚本: 如果您的工作流涉及Excel数据源,并且您希望在Microsoft Project中直接自动化操作,可以考虑使用VBA(Visual Basic for Applications)。VBA可以直接在MS Project中编写脚本,从Excel读取数据,创建项目,并精确控制视图和列的显示。

注意事项与总结

  • MPP与MSPDI的区别 再次强调,.mpp文件是Microsoft Project的二进制原生格式,包含所有数据和显示配置;而MSPDI (.xml) 主要是数据交换格式,不包含完整的显示配置。
  • 模板维护: 如果您的项目需要不同的默认视图,

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

835

2023.06.15

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

741

2023.07.05

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

736

2023.07.31

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

397

2023.08.01

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

399

2023.08.02

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

446

2023.08.02

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

430

2023.08.02

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

16926

2023.08.03

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 12.2万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号