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
的定义:
希望您能够直接在您的项目中使用此源,或者从 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");
大家好。
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
的定义:
希望您能够直接在您的项目中使用此源,或者从 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");