前段时间碰到了用户给的一个Excel,为了实现下拉筛选之类的功能excel设了很多隐藏表什么的。
导致我获得sheet时,通过索引0 拿不到。
就写了一个工具 拿到包含某字段的sheet表。
先定义一个类用来接收,所需的sheet名,和你参数字段所在的行号索引(这是我的业务需求,大家可以自行定义所需的返回值)
public class ExcelPojo {
//sheet的名字 得到后使用 workbook.getSheet(sheetName)就能拿到
public String sheetName;
//标题行 行号
public int rowNumber;
}
我的excel 我需要拿到这个表,它里面有‘序号’这个单元格,工具类就拿到workbook中第一列包含‘’序号‘’的那个sheet。
工具类
//参数 : workbook对象和 所需sheet的一个单元格内容
// 得到包含 cloum 字段的sheet名字,和参数单元格所在的行号 get行时直接从这一行下开始
//用户的ecxel有隐藏表,遍历十次(如果标数量多就增加次数)拿到财务人员基本情况统计表的sheet
public static ExcelPojo getSheet(Workbook wb, String cloum) {
ExcelPojo excelPojo = new ExcelPojo();
Sheet sheet = wb.getSheetAt(0);
int index = 0;
while (true && index < 10) {
sheet = wb.getSheetAt(index);
for (int i = 0; i < 8; i++) {
Row row = sheet.getRow(i);
if (row != null) {
Cell cell = row.getCell(0);
if (cell != null) {
String cellValue = POIUtils.getCellValue(cell);
if (cellValue.equals(cloum)) {
String sheetName = sheet.getSheetName();
//System.out.println(sheetName);
if (sheetName != null) {
excelPojo.setSheetName(sheetName);
excelPojo.setRowNumber(i);
return excelPojo;
}
}
}
}
}
index++;
}
return excelPojo;
}
使用过程
//得到workbook
XSSFWorkbook book = new XSSFWorkbook(resourceAsStream);
//使用工具拿到excel中包含‘序号’字段的sheet
ExcelPojo excelPojo = MyImportUtil.getSheet(book, "序号");
Sheet sheet = book.getSheet(excelPojo.getSheetName());