Reading/Parsing MS 项目 MPP java Android 5.0+?

Reading/Parsing MS Project MPP java Android 5.0+?

大家好。

Java上有一个MPXJ.org工程可以导入所有版本的MS工程文件,但是麻烦的是.mpp文件高于2000-2003版本.mpp,对于更高版本的文件比 2003 awt java lib 使用的 awt.Color (getColor) 未在 Android 上导入并且一切都与

NoClassDefFoundError:解析失败:Ljava/awt/Color;

这里是基本代码

MPPReader reader = new MPPReader();
String path2file = context.getFilesDir() + "/" +SAMPLE21_MPPX;
ProjectFile projectFile = reader.read(path2file); //<-- falling here

E/AndroidRuntime:致命异常:main

进程:com.example.bio.tj,PID:13427

java.lang.NoClassDefFoundError:解析失败:Ljava/awt/Color;

在 net.sf.mpxj.mpp.MPPUtility.getColor(MPPUtility.java:543) 等等...

而且这个MPXJ还依赖Apache POI,一般不会导入到Android,同样,不要连接,我用的是这个程序集:https://github.com/centic9/poi-on-android

有awt.Color的解决方法,但是这里我不明白该怎么做。

看起来您提供 link 的 Android 的 POI 版本已经解决了这个问题。这是 poi-on-android 提供的 java.awt.Color 的定义:

https://github.com/centic9/poi-on-android/blob/master/poishadow/src/main/java/org/apache/poi/java/awt/Color.java

希望您能够直接在您的项目中使用此源,或者从 poi-on-android JAR 本身中获取 class。

这是一步一步的解决方案。

  • 在 android 工作室中打开 poi-on-android 项目
  • 添加到 build.gradle(模块:poishadow)

// 在这 2 行之后

编译'org.apache.poi:poi-ooxml:3.17'

编译'com.fasterxml:aalto-xml:1.0.0'

// 用 mpxj 添加这一行 gradle

编译组:'net.sf.mpxj',名称:'mpxj',版本:'7.2.1'

  • 编译工程,获取文件\poi-on-android-master\poishadow\build\libs\poishadow-all.jar

它全部在一个 apache poi 和 mpxj 中,之后我将这个文件导入到我的项目中,第一个 运行 似乎工作正常(在 ms 项目 2010/2016 文件上测试),并且我在我的项目中添加了 onCreate

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        System.setProperty("org.apache.poi.javax.xml.stream.XMLInputFactory", "com.fasterxml.aalto.stax.InputFactoryImpl");
        System.setProperty("org.apache.poi.javax.xml.stream.XMLOutputFactory", "com.fasterxml.aalto.stax.OutputFactoryImpl");
        System.setProperty("org.apache.poi.javax.xml.stream.XMLEventFactory", "com.fasterxml.aalto.stax.EventFactoryImpl");