import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
public class ExcelUtils {
public void parseMuiltSheetExcel(File file) throws Exception{
FileInputStream in = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(in);
Map<String, Map<String, List<String>>> sheetMap = new LinkedHashMap<>();
for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
XSSFSheet sheet = wb.getSheetAt(sheetIndex);
String sheetName = sheet.getSheetName();
for (int rowNum = 0; rowNum <= sheet.getLastRowNum(); rowNum++) {
XSSFRow row = sheet.getRow(rowNum);
int lie = row.getPhysicalNumberOfCells();
XSSFRow titleRow = sheet.getRow(0);
for (int c = 0; c < lie; c++) {
XSSFCell titleCell = titleRow.getCell(c);
String title = titleCell.toString();;
Cell cell = row.getCell(c);
String value = "";
if (cell != null) {
switch (cell.getCellTypeEnum()) {
case STRING:
value = cell.getStringCellValue();
break;
case NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
if (date != null) {
value = new SimpleDateFormat("yyyy-MM-dd").format(date);
} else {
value = "";
}
} else {
value = new DecimalFormat("0").format(cell.getNumericCellValue());
}
break;
case FORMULA:
if (!cell.getStringCellValue().equals("")) {
value = cell.getStringCellValue();
} else {
value = cell.getNumericCellValue() + "";
}
break;
case BLANK:
break;
case ERROR:
value = "";
break;
case BOOLEAN:
value = (cell.getBooleanCellValue() == true ? "Y" : "N");
break;
default:
value = "";
}
if (sheetMap.get(sheetName) != null) {
Map<String, List<String>> dataMap = sheetMap.get(sheetName);
List<String> data = dataMap.get(title);
if (data!=null){
data.add(value);
}else{
dataMap.put(title,new ArrayList<>());
}
}else{
sheetMap.put(sheetName,new LinkedHashMap<>());
}
}
}
}
}
in.close();
}
}