Java使用MPXJ操作MS Project

问题描述

爱美网www.aimei999.com人员推荐!MPXJ是一个开源的包,网址http://mpxj.sourceforge.net/index.html它需要POI的支持。它可以读取MPP文件(不能写MPP文件!!!要经过XML过渡。。。)可以读写MPX文件,MPX就是一个纯文本文件,里面有TASK,Resource之类的信息,按一定格式书写的。Project98及之前版本可以另存为MPX文件,从Project2000开始就不支持另存为MPX格式了,但是,它们仍然可以读取MPX文件。MPXJ的读写的类主要有这么几个:读:net.sf.mpxj.mpp.MPPReader:readsMicrosoftProjectMPPfilesnet.sf.mpxj.mpx.MPXReader:readsMicrosoftMPXfilesnet.sf.mpxj.mspdi.MSPDIReader:readsMicrosoftMSPDI(XML)filesnet.sf.mpxj.mpd.MPDIReader:readsMicrosoftMPDfilesnet.sf.mpxj.planner.PlannerReader:readsPlanner(XML)files写:net.sf.mpxj.mpx.MPXWriter:writesMicrosoftMPXfilesnet.sf.mpxj.mspdi.MSPDIWriter:writesMicrosoftMSPDI(XML)filesnet.sf.mpxj.planner.PlannerWriter:writesPlanner(XML)files所以,目前可以做的就是:1.读取MPP文件信息,写入DB之类的……2.new一个ProjectFile,写入Task,Resources,Calendar之类的信息,然后使用MPXWriter写入MPX文件,然后用Project打开,好像会有个导入数据的对话框。……MPXJ的数据结构:一个Project由Task,Resources,Calendar构成,Task与Calendar,Resources与Calendar都有关系。Task和Resources通过ResourceAssignment关联。===========================================================下面是使用MPXWrite的一段代码,转载的,参考参考。packagempx;importjava.util.Locale;importnet.sf.mpxj.DateRange;importnet.sf.mpxj.Day;importnet.sf.mpxj.Duration;importnet.sf.mpxj.FieldType;importnet.sf.mpxj.ProjectCalendar;importnet.sf.mpxj.ProjectCalendarHours;importnet.sf.mpxj.ProjectFile;importnet.sf.mpxj.ProjectHeader;importnet.sf.mpxj.Relation;importnet.sf.mpxj.RelationType;importnet.sf.mpxj.Resource;importnet.sf.mpxj.Task;importnet.sf.mpxj.TaskField;importnet.sf.mpxj.TimeUnit;importnet.sf.mpxj.mpx.MPXWriter;importnet.sf.mpxj.utility.NumberUtility;publicclassCreateMPX{publicCreateMPX(){}publicstaticvoidmain(Stringargs[]){try{create("d:\output.MPX");}catch(Exceptionex){ex.printStackTrace(System.out);}}privatestaticvoidcreate(Stringfilename)throwsException{ProjectFilefile=newProjectFile();Tasktask1=file.addTask();task1.setName("task1");task1.setUniqueID(1);task1.setID(1);task1.setOutlineLevel(task0.getOutlineLevel()+1);Tasktask11=task1.addTask();task11.setName("task1-1");task11.setDuration(Duration.getInstance(6,TimeUnit.DAYS));task11.setStart(java.sql.Date.valueOf("2008-8-21"));task11.setFinish(java.sql.Date.valueOf("2008-8-26"));task11.setPercentageComplete(NumberUtility.getDouble(90D));task11.setUniqueID(2);task11.setID(2);task11.setResourceNames("one");Tasktask12=task1.addTask();task12.setName("task12");task12.setDuration(Duration.getInstance(5,TimeUnit.DAYS));task12.setStart(java.sql.Date.valueOf("2008-8-27"));task12.setFinish(java.sql.Date.valueOf("2008-8-31"));task12.setResourceNames("two");task12.setUniqueID(3);task12.setID(3);//前置关系Relationr=task12.addPredecessor(task11);r.setType(RelationType.FINISH_START);r.setTaskUniqueID(task11.getUniqueID());ProjectCalendarpc=file.addBaseCalendar();//设置工作日历这里设的周1-7全部工作,呵呵如不设默认为5天工作制pc.setName("压榨民工");pc.setWorkingDay(Day.SUNDAY,true);pc.setWorkingDay(Day.MONDAY,true);pc.setWorkingDay(Day.TUESDAY,true);pc.setWorkingDay(Day.WEDNESDAY,true);pc.setWorkingDay(Day.THURSDAY,true);pc.setWorkingDay(Day.FRIDAY,true);pc.setWorkingDay(Day.SATURDAY,true);ProjectCalendarHoursh1=pc.addCalendarHours(Day.SUNDAY);h1.addDateRange(newDateRange(ProjectCalendar.DEFAULT_START1,ProjectCalendar.DEFAULT_END1));h1.addDateRange(newDateRange(ProjectCalendar.DEFAULT_START2,ProjectCalendar.DEFAULT_END2));ProjectCalendarHoursh2=pc.addCalendarHours(Day.MONDAY);h2.addDateRange(newDateRange(ProjectCalendar.DEFAULT_START1,ProjectCalendar.DEFAULT_END1));h2.addDateRange(newDateRange(ProjectCalendar.DEFAULT_START2,ProjectCalendar.DEFAULT_END2));ProjectCalendarHoursh3=pc.addCalendarHours(Day.TUESDAY);h3.addDateRange(newDateRange(ProjectCalendar.DEFAULT_START1,ProjectCalendar.DEFAULT_END1));h3.addDateRange(newDateRange(ProjectCalendar.DEFAULT_START2,ProjectCalendar.DEFAULT_END2));ProjectCalendarHoursh4=pc.addCalendarHours(Day.WEDNESDAY);h4.addDateRange(newDateRange(ProjectCalendar.DEFAULT_START1,ProjectCalendar.DEFAULT_END1));h4.addDateRange(newDateRange(ProjectCalendar.DEFAULT_START2,ProjectCalendar.DEFAULT_END2));ProjectCalendarHoursh5=pc.addCalendarHours(Day.THURSDAY);h5.addDateRange(newDateRange(ProjectCalendar.DEFAULT_START1,ProjectCalendar.DEFAULT_END1));h5.addDateRange(newDateRange(ProjectCalendar.DEFAULT_START2,ProjectCalendar.DEFAULT_END2));ProjectCalendarHoursh6=pc.addCalendarHours(Day.FRIDAY);h6.addDateRange(newDateRange(ProjectCalendar.DEFAULT_START1,ProjectCalendar.DEFAULT_END1));h6.addDateRange(newDateRange(ProjectCalendar.DEFAULT_START2,ProjectCalendar.DEFAULT_END2));ProjectCalendarHoursh7=pc.addCalendarHours(Day.SATURDAY);h7.addDateRange(newDateRange(ProjectCalendar.DEFAULT_START1,ProjectCalendar.DEFAULT_END1));h7.addDateRange(newDateRange(ProjectCalendar.DEFAULT_START2,ProjectCalendar.DEFAULT_END2));ProjectHeaderph=file.getProjectHeader();ph.setCalendarName(pc.getName());MPXWriterwriter=newMPXWriter();//设置中文writer.setLocale(Locale.CHINESE);writer.write(file,filename);}}

解决方案

解决方案二:
该回复于2011-07-27 09:15:46被版主删除

时间: 2024-10-28 03:22:32

Java使用MPXJ操作MS Project的相关文章

mpp解析-JAVA解析MS project .mpp文件

问题描述 JAVA解析MS project .mpp文件 有个JAVA解析MS project .mpp文件技术问题请教一下各大牛,MS project的.MPP文件解析,不知大家之前是否有涉及到 网上有几个解决方案都只支持微软默认的这几个标准列的解析 目前的场景是客户有添加较多的自定义列,这些自定义列也是需要解析才能达到预期目标,请大家出出招. 解决方案 java解析Microsoft Project mpp文件(把 java project 发布成为可运行文件

Java使用poi操作excel实例解析_java

本文实例为大家分享了Java使用poi操作excel的具体代码,供大家参考,具体内容如下 依赖poi的jar包,pom.xml配置如下: <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0h

java源程序有操作mysql中表的语句怎么打包jar

问题描述 java源程序有操作mysql中表的语句怎么打包jar 5C 1 怎样在装有mysql的电脑运行2 怎样在没mysql的电脑运行 解决方案 MySQL装在哪个电脑都可以,只要可以远程访问就行. 解决方案二: http://blog.csdn.net/liuwei_blog/article/details/3567292 解决方案三: 不知道你是用的什么构建工具,http://blog.csdn.net/c_4818/article/details/6700950 解决方案四: http

多线程-java 并发处理耗时操作的问题

问题描述 java 并发处理耗时操作的问题 刚刚写了个测试程序 原本想使用多线程并发处理 来节省时间,结果反而更耗时.请各位指点一下. 主方法: public class MainAction { public static void main(String[] args) { /*new Action1().run(); new Action2().run(); new Action3().run();*/ new Thread(new Action1()).start(); new Thre

replace-利用java io逐行操作文件并替换内容

问题描述 利用java io逐行操作文件并替换内容 A文件: as1 dfg1 hjkl1 逐行读取A文件的内容,将1替换成 一 后将替换后的内容写到B文件中 解决方案 BufferedReader readBuffer = new BufferedReader(new FileReader( new File("D:/aaaa.txt"))); BufferedWriter write = new BufferedWriter(new FileWriter(new File(&quo

初始化-java中jacob操作word文档

问题描述 java中jacob操作word文档 org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.ExceptionInInitializerError Caused by: java.lang.ExceptionInInitializerError Caused by: java.lang.IllegalStateExcept

java中的操作句柄的问题

问题描述 java中的操作句柄的问题 在学习java的过程中,遇到这样一个问题:值传递和引用传递 我知道在所谓的值传递,仅仅是复制,然后传递,这样修改的值不会影响原值(基本数据类型都是值传递) 而引用传递是传的事地址,这样修改的话,原值也会被修改(类似于函数的参数如果是一个对象的话) 以上是我的理解,不对之处,请各位指正和补充(新人初学,谢谢) 但是还有这样一个问题: A a = B.方法 这条语句和A a = new A();创建对象有点像,之前问过一次,但是不是很理解,所以再次问下,还望各位

ms sql-Python操作MS SQL的问题

问题描述 Python操作MS SQL的问题 配置了一个SQL SERVER的数据库镜像,想通过Python执行语句修改数据库的镜像的运行模式. 就是执行 alter database testdb set safety off; 或 alter database testdb set safety full; 但是通过pymssql来执行,就异常,不知道如何处理.是应该用其他方法来执行这个语句么?还请大神指教,谢谢 import pymssql conn = pymssql.connect(h

Java日期时间操作的方法_java

本文实例为大家分享了java日期时间基本操作方法,供大家参考,具体内容如下 1. 获得Calendar实例:Calendar c = Calendar.getInstance(); 2. 定义日期/时间的格式:SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 3. 把日期/时间转换成固定格式,使用SimpleDateFormat的format()方法:String datetime = sdf.form