java mpxj mpxwriter_Java使用MPXJ操作MS Project

Java使用MPXJ操作MS Project

http://www.th7.cn/Program/java/2011/07/29/35846.shtml

http://mpxj.sourceforge.net/index.html 它需要POI的支持。 它可以读取MPP文件(不能写MPP文件!!!要经过XML过渡。。。) 可以读写MPX文件,MPX就是一个纯文本文件,里面有TASK,Resource之类的信息,按一定格式书写的。 Project 98及之前版本可以另存为MPX文件,从Project 2000开始就不支持另存为MPX格式了, 但是,它们仍然可以读取MPX文件。 MPXJ的读写的类主要有这么几个: 读: net.sf.mpxj.mpp.MPPReader: reads Microsoft Project MPP files net.sf.mpxj.mpx.MPXReader: reads Microsoft MPX files net.sf.mpxj.mspdi.MSPDIReader: reads Microsoft MSPDI (XML) files net.sf.mpxj.mpd.MPDIReader: reads Microsoft MPD files net.sf.mpxj.planner.PlannerReader: reads Planner (XML) files 写: net.sf.mpxj.mpx.MPXWriter: writes Microsoft MPX files net.sf.mpxj.mspdi.MSPDIWriter: writes Microsoft MSPDI (XML) files net.sf.mpxj.planner.PlannerWriter: writes Planner (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的一段代码,转载的,参考参考 ------------------------------------------------------------------------------------------ package mpx;     import java.util.Locale;     import net.sf.mpxj.DateRange;   import net.sf.mpxj.Day;   import net.sf.mpxj.Duration;   import net.sf.mpxj.FieldType;   import net.sf.mpxj.ProjectCalendar;   import net.sf.mpxj.ProjectCalendarHours;   import net.sf.mpxj.ProjectFile;   import net.sf.mpxj.ProjectHeader;   import net.sf.mpxj.Relation;   import net.sf.mpxj.RelationType;   import net.sf.mpxj.Resource;   import net.sf.mpxj.Task;   import net.sf.mpxj.TaskField;   import net.sf.mpxj.TimeUnit;   import net.sf.mpxj.mpx.MPXWriter;   import net.sf.mpxj.utility.NumberUtility;     public class CreateMPX   {       public CreateMPX()       {       }         public static void main(String args[])       {           try          {               create("d://output.MPX");           }           catch (Exception ex)           {               ex.printStackTrace(System.out);           }       }                private static void create(String filename) throws Exception       {           ProjectFile file =new ProjectFile();                                  Task task1 = file.addTask();           task1.setName("task1");           task1.setUniqueID(1);           task1.setID(1);           task1.setOutlineLevel(task0.getOutlineLevel()+1);                      Task task11 = 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");                              Task task12 = 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);                                    //前置关系           Relation r=task12.addPredecessor(task11);                     r.setType(RelationType.FINISH_START);                r.setTaskUniqueID(task11.getUniqueID());                      ProjectCalendar pc=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);                      ProjectCalendarHours h1=pc.addCalendarHours(Day.SUNDAY);           h1.addDateRange(new DateRange (ProjectCalendar.DEFAULT_START1, ProjectCalendar.DEFAULT_END1));           h1.addDateRange(new DateRange (ProjectCalendar.DEFAULT_START2, ProjectCalendar.DEFAULT_END2));                      ProjectCalendarHours h2=pc.addCalendarHours(Day.MONDAY);           h2.addDateRange(new DateRange (ProjectCalendar.DEFAULT_START1, ProjectCalendar.DEFAULT_END1));           h2.addDateRange(new DateRange (ProjectCalendar.DEFAULT_START2, ProjectCalendar.DEFAULT_END2));                      ProjectCalendarHours h3=pc.addCalendarHours(Day.TUESDAY);           h3.addDateRange(new DateRange (ProjectCalendar.DEFAULT_START1, ProjectCalendar.DEFAULT_END1));           h3.addDateRange(new DateRange (ProjectCalendar.DEFAULT_START2, ProjectCalendar.DEFAULT_END2));                      ProjectCalendarHours h4=pc.addCalendarHours(Day.WEDNESDAY);           h4.addDateRange(new DateRange (ProjectCalendar.DEFAULT_START1, ProjectCalendar.DEFAULT_END1));           h4.addDateRange(new DateRange (ProjectCalendar.DEFAULT_START2, ProjectCalendar.DEFAULT_END2));                      ProjectCalendarHours h5=pc.addCalendarHours(Day.THURSDAY);           h5.addDateRange(new DateRange (ProjectCalendar.DEFAULT_START1, ProjectCalendar.DEFAULT_END1));           h5.addDateRange(new DateRange (ProjectCalendar.DEFAULT_START2, ProjectCalendar.DEFAULT_END2));                      ProjectCalendarHours h6=pc.addCalendarHours(Day.FRIDAY);           h6.addDateRange(new DateRange (ProjectCalendar.DEFAULT_START1, ProjectCalendar.DEFAULT_END1));           h6.addDateRange(new DateRange (ProjectCalendar.DEFAULT_START2, ProjectCalendar.DEFAULT_END2));                      ProjectCalendarHours h7=pc.addCalendarHours(Day.SATURDAY);           h7.addDateRange(new DateRange (ProjectCalendar.DEFAULT_START1, ProjectCalendar.DEFAULT_END1));           h7.addDateRange(new DateRange (ProjectCalendar.DEFAULT_START2, ProjectCalendar.DEFAULT_END2));                                 ProjectHeader ph=file.getProjectHeader();           ph.setCalendarName(pc.getName());                              MPXWriter writer = new MPXWriter();                //设置中文           writer.setLocale(Locale.CHINESE);           writer.write(file, filename);       }   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值