使用简化版的jar包
api files('libs/poi-3.12-android-a.jar')
api files('libs/poi-ooxml-schemas-3.12-a.jar')
导入遇到了两个兼容问题
1.build.gradle文件里面
android {
要添加
packagingOptions {
exclude 'META-INF/INDEX.LIST'
}
2.加载大文件要在清单文件里面加android:largeHeap="true"和配置文件的解除大小限制
导入成功后,后面实现就简单了
第一步选择设备内的excel格式文件
可以指定文件类型跳转也可以用户选择后判断文件格式
第二步根据选择返回的Uri获取文件真实位置路径
第三步
解析文件
/**
* 读取excel (xls和xlsx)
* 从Excel报表中读出数据
*/
public static void readExcel(File file) {
String filePath = file.getAbsolutePath();
Sheet sheet = null;
List<Map<String, String>> list = null;
Workbook wb = null;
if (filePath == null) {
return;
}
String extString = filePath.substring(filePath.lastIndexOf("."));
InputStream is = null;
try {
is = new FileInputStream(filePath);
if (".xls".equals(extString)) {
wb = new HSSFWorkbook(is);
} else if (".xlsx".equals(extString)) {
wb = new XSSFWorkbook(is);
} else {
wb = null;
}
if (wb != null) {
// 用来存放表中数据
// 获取第一个sheet
sheet = wb.getSheetAt(0);
if (sheet == null) {
return;
}
//获得当前sheet的开始行
int firstRowNum = sheet.getFirstRowNum();
//获得当前sheet的结束行
int lastRowNum = sheet.getLastRowNum();
//循环除了第一行的所有行
for (int rowNum = firstRowNum + 1; rowNum <= lastRowNum; rowNum++) {
//获得当前行
Row row = sheet.getRow(rowNum);
if (row == null) {
continue;
}
//获得当前行的开始列
int lastCellNum = row.getLastCellNum();
//获得当前行的列数
String[] cells = new String[lastCellNum];
Log.d(TAG, "readDataFromExcel: " + row.getCell(0).toString());
Log.d(TAG, "readDataFromExcel: " + (String) getCellFormatValue(row.getCell(0)));
}
BaseDialog.hiddenWaitingDialog();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取单个单元格数据
*
* @param cell
* @return
*/
private static Object getCellFormatValue(Cell cell) {
Object cellValue;
if (cell != null) {
switch (cell.getCellType()) {
case Cell.CELL_TYPE_BOOLEAN:
cellValue = cell.getBooleanCellValue();
break;
case Cell.CELL_TYPE_NUMERIC:
cellValue = String.valueOf(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
if (DateUtil.isCellDateFormatted(cell)) {
cellValue = cell.getDateCellValue();
} else {
cellValue = cell.getNumericCellValue();
}
break;
case Cell.CELL_TYPE_STRING:
cellValue = cell.getStringCellValue();
break;
default:
cellValue = "";
}
} else {
cellValue = "";
}
return cellValue;
}
后续操作看需求了
jar包下载地址:https://github.com/binZai-ComeOn/ReadXlsx?tab=readme-ov-file