有段时间做项目的时候遇到了需要在Android读取Excel的需求,于是选择了轻量级库jxl.jar,这个库的缺点是文档不是那么全,而且不能读offic2007版本以上格式的xlsx,但是用来你简单操作.xls后缀的问题不大,但是要注意这个库从Excel读出来时间格式是GMT时间所以要根据需要转换成北京时间,你懂的时区转化必须要注意的一点。下面贴出为封装的把Excel文件流转换成Object[][]的源代码
package com.third.pblib;
import java.io.*;
import jxl.*;
public class UtilsJxlExcel {
public static Object[][] ReadToEnd(InputStream inputStream) throws Exception {
Workbook book = Workbook.getWorkbook(inputStream);
Sheet sheet = book.getSheet(0);
int Rows = sheet.getRows();
int Cols = sheet.getColumns();
Object[][] arr = new Object[Rows][Cols];
for (int row = 0; row < Rows; row++) {
for (int col = 0; col < Cols; col++) {
Cell cell = sheet.getCell(col, row);
CellType type = cell.getType();
if (type == CellType.DATE) {
DateCell dateCell = (DateCell) cell;
arr[row][col] = UtilsTime.GMTToLocal(dateCell.getDate());//时间必须转换一下
} else if (type == CellType.NUMBER) {
NumberCell numberCell = (NumberCell) cell;
arr[row][col] = numberCell.getValue();
} else {
arr[row][col] = cell.getContents();
}
}
}
return arr;
}
}
其中UtilsTime.GMTToLocal是一个GMT时间转北京时间的转换函数
public static java.util.Date GMTToLocal(java.util.Date gmtDate) throws Exception {
if (gmtDate == null)
return null;
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
String str = dateFormat.format(gmtDate);
dateFormat.setTimeZone(TimeZone.getDefault());
return dateFormat.parse(str);
}