【问题标题】:MS Project shows incorrect start & finish dates after importing MSPDI created by MPXJ导入 MPXJ 创建的 MSPDI 后,MS Project 显示不正确的开始和结束日期
【发布时间】:2015-12-14 21:35:00
【问题描述】:

我基于 MPXJ 库分发中的 MpxjCreate 示例创建了一个应用程序。 我创建了几个任务,其中一些带有子任务,并使用Task.setStart() / Task.setFinish() 设置任务开始/完成日期。 在我使用MSPDIWriter 编写结果文件后,可以在<Task> 标签内的结果xml 文件中看到以下标签:

<Start>2013-01-01T00:00:00</Start>
<Finish>2016-12-31T00:00:00</Finish>

但是当我使用 MS Project 2007 打开文件时,它似乎忽略了给定的值并使用来自&lt;Project&gt; 标记的&lt;StartDate&gt; 值,这会导致一系列持续时间为 1 天的任务。

请告诉,在没有任何“智力”计算的情况下,如何使用&lt;Task&gt;-&gt;&lt;Start&gt;/&lt;Finish&gt; 标记值作为 MS Project 任务开始/结束日期?

【问题讨论】:

  • 您能分享一个您正在生成的 XML 示例吗?

标签: java mpxj


【解决方案1】:

自 2003 版以来,我一直在为 MS-Project XML 文件导入而苦恼。

现在我必须处理 MSP 2013 问题(为什么选择 Microsoft?为什么它如此不可预测?)

在我看来,需要一些基本信息才能正确导入所需的值。

这是我的工作:

task.setEstimated(false); //to get rid of the percentage in the duration value

task.setPercentageComplete(50d); //50% for example
task.setPercentageWorkComplete(50d);
task.setPhysicalPercentComplete(50d);

task.setStart(<start date>);
task.setFinish(<finish date>);
task.setActualStart(<actual start date>);
task.setActualFinish(<actual finish date>); //only necessary if the task is 100%

task.setDuration(Duration.getInstance(4d, TimeUnit.DAYS)); //4d for example
task.setActualDuration(Duration.getInstance(2d, TimeUnit.DAYS));

double remainingDuration = task.getDuration().getDuration() - task.getActualDuration().getDuration();
task.setRemainingDuration(Duration.getInstance(remainingDuration, task.getDuration().getUnits()));

//if your task has resources assigned, you should set the work values
//suppose you have 2 resources assigned with 3 units each
double work = task.getDuration().getDuration() * 6;
task.setWork(Duration.getInstance(work, task.getDuration().getUnits()));
task.setRegularWork(work);

double actualWork = work * task.getPercentageComplete() / 100d;
task.setActualWork(Duration.getInstance(actualWork, task.getWork().getUnits()));

double remaining = task.getWork().getDuration() - task.getActualWork().getDuration();
task.setRemainingWork(Duration.getInstance(remaining, task.getWork().getUnits()));

好吧,我相信这就够了。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,通过使用setManualDuration(...) 添加持续时间来解决。

    显然只指定开始和结束是不够的,还需要持续时间。

    我不确定是否有必要,但我也指定setTaskMode(TaskMode.MANUALLY_SCHEDULED)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-15
      • 2020-01-19
      • 2022-12-22
      • 1970-01-01
      相关资源
      最近更新 更多