在網上搜了一下,現在用的是jxl.jar2.6.12解析xlsx文件,但只能解析到51行,后面的獲取不到了,這是什么問題?
用的是網上的這段代碼
http://www.open-open.com/home/space-37924-do-blog-id-5872.html
public static String readXLSX(String path) {
String str = "";
String v = null;
boolean flat = false;
ArrayList ls = new ArrayList();
try {
ZipFile xlsxFile = new ZipFile(new File(path));
ZipEntry sharedStringXML = xlsxFile.getEntry("xl/sharedStrings.xml");
InputStream inputStream = xlsxFile.getInputStream(sharedStringXML);
XmlPullParser xmlParser = Xml.newPullParser();
xmlParser.setInput(inputStream, "utf-8");
int evtType = xmlParser.getEventType();
while (evtType != XmlPullParser.END_DOCUMENT) {
switch (evtType) {
case XmlPullParser.START_TAG:
String tag = xmlParser.getName();
if (tag.equalsIgnoreCase("t")) {
ls.add(xmlParser.nextText());
}
break;
case XmlPullParser.END_TAG:
break;
default:
break;
}
evtType = xmlParser.next();
}
ZipEntry sheetXML = xlsxFile.getEntry("xl/worksheets/sheet1.xml");
InputStream inputStreamsheet = xlsxFile.getInputStream(sheetXML);
XmlPullParser xmlParsersheet = Xml.newPullParser();
xmlParsersheet.setInput(inputStreamsheet, "utf-8");
int evtTypesheet = xmlParsersheet.getEventType();
while (evtTypesheet != XmlPullParser.END_DOCUMENT) {
switch (evtTypesheet) {
case XmlPullParser.START_TAG:
String tag = xmlParsersheet.getName();
if (tag.equalsIgnoreCase("row")) {
} else if (tag.equalsIgnoreCase("c")) {
String t = xmlParsersheet.getAttributeValue(null, "t");
if (t != null) {
flat = true;
// System.out.println(flat + "有");
} else {
// System.out.println(flat + "沒有");
flat = false;
}
} else if (tag.equalsIgnoreCase("v")) {
v = xmlParsersheet.nextText();
if (v != null) {
if (flat) {
str += ls.get(Integer.parseInt(v)) + " ";
} else {
str += v + " ";
}
}
}
break;
case XmlPullParser.END_TAG:
if (xmlParsersheet.getName().equalsIgnoreCase("row") && v != null) {
str += "\n";
}
break;
}
evtTypesheet = xmlParsersheet.next();
}
Log.e("", str);
// System.out.println(str);
} catch (ZipException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
if (str == null) {
str = "解析文件出現問題";
}
return str;
}
2 个解决方案
#1
今天試了下poi解析,java project沒問題,但導入到android工程下就會出現:Too many method references的錯誤。雖然可以解決,但是大概了解了下poi一般在服務端用,客戶端用poi太大了。所以還是考慮用jxl,但就是解析不完,求大俠指點!!
#2
換成jxl解析,把xlsx轉成xls,然后用解析xls的代碼解析成功了